java的Math.pow源码看到了这句 if (x != x || y != y),是什么意思呀? 5C

public static double pow(double x, double y)
{
// Special cases first.
if (y == 0)
return 1;
if (y == 1)
return x;
if (y == -1)
return 1 / x;
if (x != x || y != y)
return Double.NaN;
.......
}
请问 if (x != x || y != y)这句是什么意思呀?

4个回答

图片说明

使用x != x,用于判断该值是不是NaN。不是上面的朋友说的精度问题,等号操作使用比较两个数据按照位数判等,所以一定是等的,除了NaN(0/0.0)

其实就是验证是否等于自身。防止你输入的小数,因为java中超出精度的小数基本是不等于自己的。用此可判断你输入的数是否超出精度范围。
如果if (x != x || y != y)为true,则说明你输入的数在精度范围。反之则超出精度范围,会得到不正确的结果。

你可能要理解下java中NaN代表的是什么含义了,Double.NaN的定义是public static final double NaN = 0.0d / 0.0;实际上0.0d/0、0/0.0d、0.0d/0.0d都是NaN,NaN的这个值本身和本身是不相等的,比如你写一个输出语句System.out.println(0.0d / 0 == 0.0d / 0);, 这个就会输出false

判断x和y是不是Double.NaN值!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐