IEEE-754浮点标准规定:
四种相互排斥的关系是可能的:小于,平等,大于和无序。最后一种情况是在至少一个操作数是NaN时出现的。每个NaN都应该将无序与包括自身在内的所有事物进行比较。
然而(代码页):
<?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浮点数?
发布于 2014-05-28 02:23:53
将两种想法分开是有用的:
语言标准机构可以根据自己认为合适的方式来指定或保留IEEE浮点行为的数量或数量。您无法从NaN比较的行为中判断是否使用IEEE浮点格式。
例如,Java为float和double指定了行为,如果不使用IEEE 754 32位和64位二进制格式,将很难实现。另一方面,Float和Double都有比较方法,它们认为NaN等于它自己,并且大于所有其他浮点数。
根据浮点数,“虽然它依赖于系统,但是PHP通常使用IEEE754双精度格式.”
https://stackoverflow.com/questions/23901740
复制相似问题