double を整数部分と小数部分に分割しようとしています。私のコードは動作しますが、私が使用しているマイクロコントローラにはアセンブリに専用の乗算命令がないため、遅すぎます。例えば、
temp = ((int)(tacc - temp); // This line takes about 500us
しかし、私がこれを行うと、
temp = (int)(100*(tacc-temp)); // This takes about 4ms
マイクロコントローラーを高速化することはできますが、低電力を維持しようとしているので、これを高速化できるかどうかに興味があります。これは、私が実際に最適化に興味を持っている小さな部分です:
txBuffer[5] = ((int)tacc_y); // Whole part
txBuffer[6] = (int)(100*(tacc_y-txBuffer[5])); // 2 digits of fraction
次のように、シフトを使用して 10 を掛ける高速な方法があることを覚えています。
a * 10 = (a << 2 + a) << 1
おそらくこれを入れ子にして、100倍にすることもできます。他に方法はありますか?