0

コードを確認したところ、ビット操作 (|0) に関する計算ミスが見つかりました。

まず、(a*b)|0 のように 2 つの数値を計算した後に '|0' を使用する特別な理由があるのだろうか。

第二に、以下のケースでは、結果が 220050 になると予想していますが、結果は 220049 です。なぜこの結果が得られるか知っていますか?

importPackage(java.io); importPackage(java.lang);

var a = 164.700;
var b = 1500;

var result = (a*b)|0;


System.out.println(result);
4

1 に答える 1

1

これは、|0ゼロに向かって丸めることによって、値を 32 ビット整数に変換します。数値は内部的に 2 進数で格納されているため、乗算の結果は整数よりもわずかに小さくなります。ほとんどの分数を 2 進数で正確に表すことはできません。同じ理由で、1/3 を 10 進数で正確に表現することはできません。小数点以下の桁数。164.7 は 164.69999999999998863131622783839702606201171875 となります。

于 2016-06-16T06:17:15.607 に答える