我在计算一些对数时偶然发现了PHP(5.4.6)中的这种奇怪的(?)行为。我需要的是基数为2的对数,简而言之 - 这就是发生的事情:
$l1 = log(8, 2);
var_dump("LOG", $l1);
var_dump("FLOOR", floor($l1));
,输出结果为:
string(3) "LOG"
float(3)
string(5) "FLOOR"
float(2)
由于浮动点不同,floor(float(3))
等于float(2)
可能是正常的,但我无法找到合理的解释。
我用
解决了这个问题$l2 = log(8)/log(2);
var_dump("LOG", $l2);
var_dump("FLOOR", floor($l2));
返回:
string(3) "LOG"
float(3)
string(5) "FLOOR"
float(3)
正如所料。
我不会发布这个,但是今天花了我一个小时的调试时间,所以也许有人可以解释这里发生了什么以及为什么?