问题描述
java.lang.Math#min(double, double):
public static double min(double a, double b) { if (a != a) return a; // a is NaN if (a == 0.0d && b == 0.0d && Double.doubleToLongBits(b) == negativeZeroDoubleBits) return b; return (a <= b) ? a : b; }
在什么情况下 a != a 会返回 true?似乎是当 a 为 NaN 时,但我无法想象一个例子.可以提供一份吗?
In which case could a != a return true? It seems that it's when a is NaN, but I can't imagine an example. Could you please provide one?
推荐答案
一个简单的例子是
double d = Double.NaN; // or double d = 0.0/0.0; // or double d = Double.POSITIVE_INFINITY + Double.NEGATIVE_INFINITY; if (Double.isNaN(a)) { // tests if a != a // do something
BTW Double.compare() 确实认为 NaN 相等
BTW Double.compare() does see NaN as equal
if (Double.compare(d, d) == 0) // always.
对于任何类型和值,多线程都是可能的.例如
With multiple threads this is possible for any type and value. e.g.
if (a != /* another thread changes 'a' */ a) { // a thread changed a while you were looking at it.