时间积累

时间:2018-04-10 10:35:37

标签: php time timer precision

我在计时器工作时注意到的事情是,正常时间累计时间似乎进一步增加。

这是一个简单的例子:

$time = microtime(true);

for (;;) {
    time_nanosleep(2, 0);
    var_dump(microtime(true) - $time);
}

现在我希望var_dump的计算输出会增加两秒,这会产生接近的精度,但奇怪的是4点精度也会增加:

float(2.0001111030579)
float(4.000256061554)
float(6.0003678798676)
float(8.0004849433899)
float(10.000600099564)
float(12.000720024109)
float(14.000848054886)
float(16.000955104828)
float(18.001054048538)
float(20.001163005829)
float(22.001266002655)
float(24.001379013062)
float(26.001489877701)
float(28.001588106155)
float(30.001708984375)
float(32.001836061478)

经过一段时间后,我想到了这个数字会增加额外的秒数,这似乎不可能,因为我每两秒检查一次系统时间。

可能有一个合理的解释,这个计时器实际上是准确的,但我不知道它是什么。谁能解释一下?

1 个答案:

答案 0 :(得分:0)

根据评论中的实现,以下代码至少保证准确度一致性为0.0001秒:

$interval = 2000000;
$thisInterval = $interval;

$time = microtime(true);

for (;;) {
    time_nanosleep(
        floor($thisInterval / 1000000),
        fmod($thisInterval, 1000000) * 1000
    );
    $elapsed = microtime(true) - $time;
    $thisInterval = $interval - (fmod($elapsed, $interval / 1000000) * 1000000);

    var_dump($elapsed);
}
相关问题