く、数値計算なんてキライだ・・・

なんか、年に1回ぐらいは、このバグで苦しんでる気がするなー。
 BMWなんか妙にダメージ値が低いので、今更ではあるんですが、nobitaにいわれて手計算と実際に出てくる値を比べて見ました。したら、プログラムの方が間違っていた罠(当然といえば当然ですが・・・)。
 で、どこで間違ってるんだ! と、探した所、数値計算の代表的なバグである情報落ちに見事に引っかかってました・・・。くそー、何度か苦しめられてたから、わりと意識してるつもりだったんだけどなー。見落としがあったようで・・・。

ちなみに、情報落ちというのは、整数型だけで数値計算をやっていると良く起きるやつ。つまり、小数点以下の値が使えないので、「x*(i/2)」とかやった時に、i/2の部分の小数以下が切り捨てられます。そのため、「i==1」だとすると、「i/2==0.5」となって欲しいのですが、「i/2==0」となってしまい正しく計算が行われないという問題。
 この場合の回避方法は簡単で、「x*i/2」にして、かけ算を先にやれば良いだけ。わり算は一番最後にやる。これが鉄則。
 なのですが、どうもダメージ計算の部分を作ってた時には、すっぱり抜けてたようで・・・。