如何保持时间没有累积错误?

Ste*_*314 3 embedded idioms

如何在一个简单的嵌入式系统中跟踪时间,假设您需要以秒为单位的时间的定点表示,并且您之间的时间间隔不能以该定点格式精确表达?在这些情况下,如何避免累积错误.

这个问题是对slashdot 这篇文章的反应.

0.1秒不能整齐地表示为二进制定点数,正如1/3不能整齐地表示为十进制定点数.任何二进制定点表示都有一个小错误.例如,如果在该点之后有8个二进制位(即使用按256缩放的整数值),则0.1乘256为25.6,将四舍五入为25或26,导致-2.3%的错误或分别为+ 1.6%.在该点之后添加更多二进制位会减小此错误的比例,但无法消除它.

重复添加后,误差逐渐累积.

如何避免这种情况?

Ste*_*314 7

一种方法不是试图通过重复添加这个0.1秒常数来计算时间,而是保持一个简单的整数时钟滴答计数.这个滴答计数可以根据需要以秒为单位转换为定点时间,通常使用乘法后跟除法.给定中间表示中的足够比特,该方法允许任何合理缩放,并且不累积错误.

例如,如果当前的滴答计数是1024,我们可以得到当前时间(在点后8位的固定点)乘以256,然后除以10 - 或等效地乘以128然后除以5无论哪种方式,都存在错误(除法中的余数),但错误是有界的,因为余数总是小于5.没有累积错误.