在看到许多关于比较浮点相等性的 PHP 问题后,答案是简单地为 Epsilon 选择一个任意值,然后执行if( abs($a-$b) < 0.000001 )
.
问题是 Epsilon 通常比人们倾向于选择的值要小得多 [我的机器上的 2.22e-16] 并且实际上计算起来非常简单:
$macheps = (float) 1.0;
do {
$macheps /= (float) 2.0;
} while( (float) (1.0 + ($macheps/2.0)) != 1.0 );
printf("Epsilon: %0.25f\n", $macheps);
C++ 有std::numeric_limits<double>::epsilon()
,Python 有sys.float_info.epsilon
,那么为什么 PHP 会悬而未决呢?