私はArduinoで高速に実行し、整数のパーセンテージを大まかに概算する必要があるコードを書いています。
たとえば、ある数値の 90%、70%、30% などを見つけたいとします。x * 0.9; または x * 0.3; しかし、速度が必要なので、浮動小数点計算は避けたいです。単純に 2 のべき乗で除算する場合は、ビット単位のシフトを行いますが、整数を使用して 90%、80% などを概算するための同様の手法はありますか?
私はArduinoで高速に実行し、整数のパーセンテージを大まかに概算する必要があるコードを書いています。
たとえば、ある数値の 90%、70%、30% などを見つけたいとします。x * 0.9; または x * 0.3; しかし、速度が必要なので、浮動小数点計算は避けたいです。単純に 2 のべき乗で除算する場合は、ビット単位のシフトを行いますが、整数を使用して 90%、80% などを概算するための同様の手法はありますか?
これらのパーセンテージは、分母が 2 のべき乗である分数で概算できます。
を使用した簡単な例を次に示し2^16
ます。
90% = 90 / 100 ~ 58982 / 65536
70% = 70 / 100 ~ 45875 / 65536
30% = 30 / 100 ~ 19661 / 65536
x% = x / 100 ~ x * 655 / 65536
除算 (現在は 2 のべき乗) は、シフトを使用して実行できます。
もちろん、これらの分数を生成するには、ある程度の事前計算が必要になる場合があります。
ビット シフト ビット シフトと加算のみを使用して、どのように乗算と除算を行うことができますか?
ビット シフトを使用して、arx の例 x = (x*9)/10 を乗算および除算できます。
コード例については、行き詰まった場合は、いくつかの脳細胞を燃やして解決することができます. ただ聞いてください:)