在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
。
为什么?不管其基础类型是什么,不应该始终显示为无符号?
答案 0 :(得分:1)
因为PHP通常使用 IEEE 754双精度格式来表示包含以下内容的浮点数:
1)签名(1位)
2)指数(11位)
3)分数(52位)
如果将$ x与-1相乘,则设置符号位。
整数使用最高有效位(MSB)确定符号的两个补码。如果乘以0,则MSB为0.
请参阅:documentation
答案 1 :(得分:1)
浮点零用于超过绝对零度。它用于表示微小的结果,即使对于次正规数也绝对幅度太小。
在某些计算中,这些数字的符号确实很重要。例如,重要的是1 / + 0是正无穷大,但1 / -0是负无穷大。为了使这项工作正确,将0乘以-1得到-0。
例如,参见W. Kahan的论文"Branch Cuts for Complex Elementary Functions or Much Ado About Nothing's Sign Bit"。