为什么NA​​N在PHP中不等于除了true之外的所有内容?

Jer*_*rub 13 php floating-point

在PHP中,NAN比较假到0,"0",false,array(),array(1),NAN,null基本上所有其他类变量,我可以辨别.

NAN == true回报true.为什么要NAN == true回来true

hab*_*bit 9

在PHP中,与之$x == true相同$x? true : false.也就是说,比较等于true==,而不是===意味着$x将评估为true在布尔上下文.

如果NAN要在布尔上下文中求值为false,NAN == false则将其计算为true.

  • @alex:如果我知道的话.php文档的组织非常糟糕. (4认同)
  • @habnabit:我只是指出NaN不像你的其他`$ x`值.你不能仅仅根据其他一些值`== true`来声称'NaN == true`是有意义的.`NaN`是它自己的野兽,它与数字,字符串,布尔值或你可能提出的任何其他东西不同.它甚至不等于它自己.在_that_的基础上,我认为对于"NaN == false"更有意义,在这方面你没有提出明确的论据,因为**为什么**不是这样. (2认同)

小智 6

NAN(相当NAN或信令NAN)是非零浮点值. *这就是为什么*

sqrt(-1.0) -> NAN
Run Code Online (Sandbox Code Playgroud)

有-NAN和+ NAN虽然大约有80286,但它通常在测试中被认为是NAN.

如果需要,请检查FPU浮点指令集.

+ INF和-INF也是非零浮点值:

- log(0.0) -> +INF
log(0.0) -> -INF
Run Code Online (Sandbox Code Playgroud)

这是英特尔浮点堆栈的转储.我只列出我正在讨论的几个值:(不要忘记,在内部,FPU是10个字节):

     <exp>  <mantissa>
0.0  00 00 00 00 00 00 00 00 00 00
-INF FF FF 80 00 00 00 00 00 00 00
+INF 7F FF 80 00 00 00 00 00 00 00
-NAN FF FF C0 00 00 00 00 00 00 00
+NAN 7F FF C0 00 00 00 00 00 00 00
Run Code Online (Sandbox Code Playgroud)

所以你可以看到,只有0.0是零!