我正在查看Android框架中的Math
来源,这是round()
方法的样子:
public static int round(float f) {
// check for NaN
if (f != f) {
return 0;
}
return (int) floor(f + 0.5f);
}
我试图围绕第一次检查没有成功的事情。怎么可能与自己不同?我也想不出任何能让这个变得与众不同的测试案例......任何想法?
答案 0 :(得分:0)
怎么可能与自己不同?
如果f
是NaN,它将测试与包括另一个NaN在内的所有浮点数不同。这就是定义。来自JLS #15.21.1:
“如果任一操作数是NaN,则==的结果为假,但!=的结果为真。实际上,当且仅当x的值为NaN时,测试x!= x才为真。”< / BLOCKQUOTE>我也想不出任何可以使这有任何不同的测试用例......任何想法?
错误,
Float.NaN.
答案 1 :(得分:0)
NaN是x != x
成立的唯一变量。看看this answer for more details。