秒単位の時間の固定小数点表現が必要であり、ティック間の時間がその固定小数点形式で正確に表現できない場合、単純な組み込みシステムで時間を追跡するにはどうすればよいでしょうか? そのような状況で累積エラーをどのように回避しますか。
この質問は、 slashdot に関するこの記事への反応です。
1/3 を 10 進固定小数点数として適切に表現できないのと同様に、0.1 秒を 2 進固定小数点数として適切に表現することはできません。2 進固定小数点表現には小さな誤差があります。たとえば、ポイントの後に 8 バイナリ ビットがある場合 (つまり、256 でスケーリングされた整数値を使用)、0.1 x 256 は 25.6 であり、25 または 26 に丸められ、-2.3% のオーダーのエラーが発生します。またはそれぞれ+1.6%。ポイントの後にバイナリ ビットを追加すると、このエラーの規模は小さくなりますが、なくすことはできません。
加算を繰り返すと、誤差は徐々に蓄積されます。
どうすればこれを回避できますか?