- 953 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 00:40:19 ID:XEs+C953]
- >>952
小数を扱う場合、パソコン内では10進数ではなく2進数なので、 10進数ではキリのよい数値のように思えても、 2進数では無限循環小数(割り切れない割り算で、小数点以下を延々繰り返してしまう数)になってしまう数値がある。 もちろんパソコン内のメモリは無限ではないので、ある桁以下は省かれてしまう。 これを丸め誤差という。 以下のコードを実行してみるとわかるが、 i = 0.2; for (k=0;k<20;k+=1) { show_message(string_format(i,20,18)); i += 0.2; } i が 4 となるべきところで、GameMakerでは微妙に4より大きい数値になることがわかる。 (※常に大きい数値となるわけではなく、本来の数値より少なくなることもある) これは、丸め誤差が積み重なってできた誤差になってて、真に4となるわけではない。 なもんで、 if文の image_index == 4 の条件は満たさない、と考えられる。 このような理由で、プログラムの世界では浮動小数な変数をそのまま条件文でイコールを使うのはご法度。と言われてる。 誤差を意識したコーディングを心がける必要がある。 GameMakerの数値は全て浮動小数扱い。だが、整数のまま扱ってる分には問題ない、はず。 (私はプロじゃないんで…かじった知識程度で申し訳ない、間違ってたら指摘ヨロ)
|

|