2

コントロールの感触に影響を与える関数を書いていますが、15.9で割るのがほぼ正しいことがわかりました。私の自然な本能は、これを16で除算するように変更することです。これは、コンパイラーによってシフト操作に最​​適化できるためです。ただし、この場合、値はfloatです。フロート除算に最適な除数はありますか?

4

2 に答える 2

2

代わりに 0.0628930818 を掛けてみませんか? 15.9 で割るのが「ほぼ正しい」場合、逆数を掛けても、最後の小数まで完全に正確ではない可能性がありますが、それでも「ほぼ正しい」と言えます。最適化コンパイラは、いくつの「寛容な数学」フラグが使用されている場合、これを自動的に行うことさえあります (通常、これは、精度がいくらか失われる可能性があるため、厳密には許可されていません)。

とにかく、16 で割るよりも正確です。そして、指数ビットを改ざんするほどのハックではありません。

于 2012-10-09T12:48:38.747 に答える
0

float を 16 で割ることもかなり簡単です。指数を 4 だけ減らす必要があります。ただし、アンダーフローもチェックする必要があるため、コンパイラはここで最適化を行わないと思います。

明確にするために、私は指数ビットを直接操作することを提案していません。floatの潜在的に最速の約数も 2 の累乗であることを示したかっただけです。

于 2012-10-09T09:11:42.047 に答える