C ++に浮かぶための暗黙の鋳造整数計算
-
20-09-2019 - |
質問
整数計算をキャストする指令またはパラメーターを備えたコンパイラは、暗黙的に浮かびます。例えば:
float f = (1/3)*5;
cout << f;
計算定数(1、3、10)が整数であるため、「F」は「0」です。コンパイラディレクティブまたはパラメーターで整数計算を変換したい。つまり、明示的なキャストや「.f」プレフィックスは使用しません。
float f = ((float)1/3)*5;
また
float f = (1.0f/3.0f)*5.0f;
明示的なキャストや「.F」のことなしにこのプロセスを実行するパラメーターを備えたC/C ++コンパイラを知っていますか?
解決
あなたが言及した2つの方法のどちらも気に入らないなら、あなたはおそらく運が悪いでしょう。
これで何を達成したいと思っていますか? 「フロートディビジョン」を行った専門のオペレーターは、トークン化後のある時点でINTをフロートに変換する必要があります。つまり、実行でパフォーマンスのメリットを得ることはできません。
他のヒント
あなたが望むことをしたコンパイラは、もはや適合C ++コンパイラではありません。整数部門のセマンティクスはよく指定されています(少なくとも正の場合は)、それを変更することを提案しています。
また、すべてに適用されるため、危険です。また、ある時点で、標準的な整数算術に依存するコードがある場合があります。 (結局のところ、それをキャッチするテストがあれば、おそらく望ましくない整数算術をキャッチするテストがあるでしょう。)
ですから、私が持っている唯一のアドバイスは、ユニットテストを書いて、コードレビューを持ち、魔法の数字を避けようとすることです(代わりに、それらをとして定義することです。 const float
).
C ++では、コードに数値の値が散らばっているのを見るのは少し奇妙です。一般に、これらのような「魔法の数字」を独自の静的constフロート値に移動することは、ベストプラクティスと考えられています。これにより、この問題が削除されます。
いいえ、これらの2つのオプションはあなたが持っている最高のものです。