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
はです。NaN
a+0.5d
NaN
Math.floor()
に渡されたときにStrictMath.floor()
返されるに委譲されます。NaN
NaN
NaN
すると、long
0 が返されますしたがって、最終的には、NaN
a へのキャストが 0 を返す理由に行き着きます。この問題は、この質問long
で徹底的に議論されています。
ハハ。頭を殴りたい。
Math.round(double)
はlongを返しますが、longを にすることはできません。代替は例外です。NaN
C# では、結果は依然としてdouble
.