私は次のようなcの式を持っています:
X = (a * X) / b;
これは、で再スケーリングX
するために使用されa/b
ます。ただしX
、16ビットのunsigned intであり、withの乗算a
は簡単にオーバーフローする可能性があります。正確な結果が得られる整数だけを使用してこの計算を行うにはどうすればよいですか。
もちろん浮動小数点演算を使用することもできますが、この操作が浮動小数点ハードウェアのないプロセッサで機能する可能性が高くなります。
編集:aとbは両方とも32ビットの符号なし整数であると言うのを忘れました。さて、私の答えは、右シフトa
しb
て、両方が16ビットに収まるまでです。その方法a * X
は最大32ビットであり、最終的な計算は正確です。