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