【发布时间】:2014-07-17 02:14:42
【问题描述】:
IEEE-754 浮点标准说:
可能有四种互斥关系:小于、等于、大于和无序。最后一种情况出现在至少一个操作数是 NaN 时。每个 NaN 都应与包括自身在内的所有内容进行无序比较。
然而 (codepad here):
<?php
echo phpversion() . " " . zend_version() . " " . php_uname() . "\n";
// 5.2.5 2.2.0 Linux 2cf38fbc9b9e 3.11.0-15-generic #25-Ubuntu SMP
// Thu Jan 30 17:22:01 UTC 2014 x86_64
NAN < NAN; // true
NAN > NAN; // true
INF < INF; // true
INF > INF; // true
很明显,NAN 和 NAN(以及 INF 和 INF 之间)之间存在不止一种关系,而实际上应该只有一种关系。在具有 IEEE-754 浮点数的许多(大多数?全部?)语言中,“无序”意味着 NaN < NaN 为假,NaN > NaN 为假,NaN == NaN 为假。这是否表明 PHP 不使用 IEEE-754 浮点数?
【问题讨论】:
-
来自documentation:“浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式。"
-
我编辑了我的问题以添加一些平台/版本信息(以及我观察到此行为的键盘链接)。
-
这无疑表明 PHP 不符合 IEEE 语义。它是否以 IEEE 指定的格式在内部表示它们是另一个问题。
标签: php floating-point ieee-754