在PHP中,让我们创建一个变量并将其值设置为0
:
$x = 0;
echo $x;
它将显示0
.如果将其乘以-1
:
$x = -1 * $x;
echo $x;
我们仍然看到0
.但如果$x
是浮点数:
$x = 0;
$x = (float)$x;
$x = -1 * $x;
echo $x;
我们会得到输出:-0
.
为什么?无论其基础类型如何,零不应该始终显示为无符号吗?
因为PHP通常使用IEEE 754双精度格式的浮点数,其中包括:
1) 符号(1 位)
2) 指数(11 位)
3) 分数(52 位)
如果将$x乘以 -1,则设置符号位。
整数使用两个补码,其中最高有效位 (MSB) 确定符号。如果乘以 0,则 MSB 为 0。
请参阅:https://en.wikipedia.org/wiki/Signed_zero
浮点零不仅仅用于绝对零。它用于表示微小的结果,即使对于低于正数,绝对幅度也太小。
在某些计算中,这些数字的符号确实很重要。例如,重要的是 1/+0 是正无穷大,但 1/-0 是负无穷大。为了使这项工作正确,将 0 乘以 -1 得到 -0。
例如,参见W. Kahan的论文"复杂基本函数的分支切割或关于无的符号位的很多ado"。