Java 为什么Android中的Math.round(float f)方法会检查NaN?
我查看了Android框架中的数学资源,下面是round方法的样子:Java 为什么Android中的Math.round(float f)方法会检查NaN?,java,android,Java,Android,我查看了Android框架中的数学资源,下面是round方法的样子: public static int round(float f) { // check for NaN if (f != f) { return 0; } return (int) floor(f + 0.5f); } 我正试图对第一张支票所做的事了如指掌,但没有成功。f和它自己有什么不同?我也想不出任何一个测试用例会让这有什么不同。。。有什么想法吗 f和它自己有什么不同 如果
public static int round(float f) {
// check for NaN
if (f != f) {
return 0;
}
return (int) floor(f + 0.5f);
}
我正试图对第一张支票所做的事了如指掌,但没有成功。f和它自己有什么不同?我也想不出任何一个测试用例会让这有什么不同。。。有什么想法吗
f和它自己有什么不同
如果f是一个NaN,它将测试为不同于包括另一个NaN在内的所有浮动。这就是定义。发件人:
如果任一操作数为NaN,则==的结果为false,但!=这是真的。事实上,测试x=当且仅当x的值为NaN时,x为真。
我也想不出任何一个测试用例会让这有什么不同。。。有什么想法吗
呃,Float.NaN。NaN是x!=x是正确的。请看。请参阅。这就是它的定义。我觉得这有点混乱,但我想这是有道理的。谢谢EJP,我们将在possible@downvoter你在和JLS争论。如果你有一个超越引文,请提供它。谢谢!这条线让我更容易理解它的工作原理