チャレンジする人いますか?最大値で固定された数値のラップ/オーバーフロー動作を実現する効率的なアルゴリズムを探しています。
たとえば、可能な最大数値は次のように定義されます。
#define MAX_NUMBER_VALUE 100
そして、translate
符号付き 32 ビットまたは 64 ビットの整数値を取り、その MAX_NUMBER_VALUE 定数を使用して「ラップする」関数:
int_fast8_t translate(int_fast32_t value) {
if (abs(value) > MAX_NUMBER_VALUE) {
return ...; // This!
}
return value;
}
期待される入力と出力:
translate(55) => 55
translate(100) => 100
translate(101) => -100
translate(102) => -99
translate(200) => -1
translate(202) => 1
translate(300) => 99
translate(-40) => -40
translate(-100) => -100
translate(-101) => 100
translate(-102) => 99
translate(-200) => 1
translate(-201) => 0
...
値は、あたかも丸い惑星であるかのように数値の周りを「歩き回る」。これは、C/C++ が int オーバーフロー条件を処理する方法と似ています。この種のラッピングを実現するための高速で効率的な方法があるのだろうか? ビットシフトやその他のビット単位の操作と同様に?