我在计时器工作时注意到的事情是,正常时间累计时间似乎进一步增加。
这是一个简单的例子:
$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)
经过一段时间后,我想到了这个数字会增加额外的秒数,这似乎不可能,因为我每两秒检查一次系统时间。
可能有一个合理的解释,这个计时器实际上是准确的,但我不知道它是什么。谁能解释一下?
答案 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);
}