为什么Android中的Math.round(float f)方法检查NaN?

时间:2014-02-18 01:47:10

标签: java android

我正在查看Android框架中的Math来源,这是round()方法的样子:

public static int round(float f) {
    // check for NaN
    if (f != f) {
        return 0;
    }
    return (int) floor(f + 0.5f);
}

我试图围绕第一次检查没有成功的事情。怎么可能与自己不同?我也想不出任何能让这个变得与众不同的测试案例......任何想法?

2 个答案:

答案 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