Ответ 1
Ха-ха. Я хочу ударить себя в голову.
Math.round(double)
возвращает long и long не может быть NaN
. Альтернативой является исключение.
В С# результат все равно a double
.
Я думал, что результат любой математической операции над NaN должен дать мне NaN назад, но Math.round(Float.NaN) == 0
В чем обоснование такого поведения Math.round()?
Любопытно, что С# ведет себя по-другому: http://msdn.microsoft.com/en-us/library/75ks3aby.aspx
Ха-ха. Я хочу ударить себя в голову.
Math.round(double)
возвращает long и long не может быть NaN
. Альтернативой является исключение.
В С# результат все равно a double
.
Math.round()
определяется как (long)Math.floor(a + 0.5d)
.
a
- NaN
, то a+0.5d
- NaN
.Math.floor()
delagated to StrictMath.floor()
, который возвращает NaN
при передаче в NaN
.NaN
на long
он возвращает 0Итак, в конце концов, дело в том, почему приведение NaN
в long
возвращает 0. Эта проблема была подробно обсуждена в этом вопросе.