0

私の Windows デスクトップでは、次の 2 つの数値を乗算します。

var a:Number = 31.05263157894737;
trace(a * 19) // will print '590'

a590 を 590 で割ると余りが 0 になるのは明らかですよね? 何らかの理由で、異なる結果が得られます。

trace(590 % a) // will print '31.05263'

私の質問は、これはどのように起こるのですか? 1 % 0.5 の剰余が 0 になるのはなぜですか?

4

1 に答える 1

2

31.05263157894737 * 19正確590には ではありません590.00000000000003

言い換えると590.00000000000003 % 31.05263157894737 = 0590がわずかに小さいため、0 に到達/ラップアラウンドするのに必要な量よりわずかに少なくなります。

いずれにせよ、ソース コードで正確な数値のように見えるものを使用したとしても、浮動小数点演算で正確な結果が得られることはめったにありません。この場合) かなり不明確な結果が得られます。

于 2013-06-11T08:16:56.597 に答える