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)这句是什么意思呀?
你可能要理解下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值!
使用x != x,用于判断该值是不是NaN。不是上面的朋友说的精度问题,等号操作使用比较两个数据按照位数判等,所以一定是等的,除了NaN(0/0.0)
其实就是验证是否等于自身。防止你输入的小数,因为java中超出精度的小数基本是不等于自己的。用此可判断你输入的数是否超出精度范围。
如果if (x != x || y != y)为true,则说明你输入的数在精度范围。反之则超出精度范围,会得到不正确的结果。