为什么PHP'浮点数0(零)正在显示符号?

时间:2016-03-16 20:20:40

标签: php floating-point

在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

为什么?不管其基础类型是什么,不应该始终显示为无符号?

2 个答案:

答案 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"