プロが教えるわが家の防犯対策術!

フリーランタイマー(MAXは2byte:0xFFFFとしている)の現在値と前回値の差分を出すとき、
前回値の方が現在値よりも大きくなった場合(要は前回値がMAX付近だった時)は、
MAX値から前回値を引いた値を、現在値に加算して差分を出すという考えは正しいでしょうか

ご教授お願いします

A 回答 (2件)

> MAX値から前回値を引いた値を、現在値に加算



なら、

差 = MAX値 - 前回値 + 現在値

ですが、

MAX = 0xFFFF
前回値 = 0xFFFF
現在値 = 0x0000

の場合、

差 = 0xFFFF - 0xFFFF + 0x0000 = 0

正解は1なので、結果の良し悪しではなく間違いです。

正しくは、

差 = MAX値 - 前回値 + 現在値 + 1

です。

ただし、#1の方のとおり、オーバーフローを利用すれば、常に

現在値 - 前回値

で問題ありません。
    • good
    • 0

一般的に言えば、誤りです。

タイマーが1週以上してる可能性もあるので。

前回の計測から今回の計測まで絶対に1周以上回っていない、という前提が成り立つなら、それでも殆ど問題ありませんが
その場合は(Intelのような、減算によるアンダーフローで例外が飛ばないCPUの場合は)、単に減算する方が良い結果になります。

例)
前回:0xf000 今回:0x0050 として
0x0050 + (0xffff - 0xf000) = 0x104f
0x0050 - 0xf000 = 0x1050 (16bit整数型を用いる場合。)
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!