NaN に対する数値演算の結果は NaN を返すはずだと思っていましたが、Math.round(Float.NaN) == 0
Math.round()のこのような動作の根拠は何ですか?
興味深いことに、C# の動作は異なります: http://msdn.microsoft.com/en-us/library/75ks3aby.aspx
NaN に対する数値演算の結果は NaN を返すはずだと思っていましたが、Math.round(Float.NaN) == 0
Math.round()のこのような動作の根拠は何ですか?
興味深いことに、C# の動作は異なります: http://msdn.microsoft.com/en-us/library/75ks3aby.aspx
Math.round()として定義され(long)Math.floor(a + 0.5d)ます。
aはです。NaNa+0.5dNaNMath.floor()に渡されたときにStrictMath.floor()返されるに委譲されます。NaNNaNNaNすると、long0 が返されますしたがって、最終的には、NaNa へのキャストが 0 を返す理由に行き着きます。この問題は、この質問longで徹底的に議論されています。
ハハ。頭を殴りたい。
Math.round(double)はlongを返しますが、longを にすることはできません。代替は例外です。NaN
C# では、結果は依然としてdouble.