在PHP中计算对数 - 浮点怪异的原因

时间:2014-09-05 15:35:44

标签: php precision logarithm

我在计算一些对数时偶然发现了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)

正如所料。

我不会发布这个,但是今天花了我一个小时的调试时间,所以也许有人可以解释这里发生了什么以及为什么?

0 个答案:

没有答案