2

整数計算を暗黙的に float にキャストするディレクティブまたはパラメーターを持つコンパイラーはありますか。例えば:

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++ コンパイラを知っていますか?

4

4 に答える 4

3

あなたが望むことをしたコンパイラは、もはや適合する C++ コンパイラではありません。整数除算のセマンティクスは (少なくとも正の数に対して) 明確に指定されており、それを変更することを提案しています。

また、すべてに適用されることになるため、危険でもあります。また、ある時点で、標準の整数演算に依存するコードを使用する可能性があり、これは暗黙のうちに無効になります。(結局のところ、それをキャッチするテストがあれば、望ましくない整数演算をキャッチするテストがおそらくあるでしょう。)

したがって、私が得た唯一のアドバイスは、単体テストを作成し、コード レビューを行い、マジック ナンバーを避けるようにすることです (代わりに として定義しますconst float)。

于 2010-03-15T20:54:47.257 に答える
2

あなたが言及した 2 つの方法のいずれかが気に入らない場合は、おそらく運が悪いでしょう。

これで何を達成したいですか?「float-division」を行った特殊な演算子は、トークン化後のある時点で int を float に変換する必要があります。これは、実行時にパフォーマンス上の利点が得られないことを意味します。

于 2010-03-15T18:48:12.213 に答える
2

C++ では、コード全体に多数の数値が散りばめられているのを見るのは少し奇妙です。一般に、これらのような「マジック ナンバー」を独自の static const float 値に移動することがベスト プラクティスと見なされます。これにより、この問題が解消されます。

于 2010-03-15T19:51:07.977 に答える
1

いいえ、これらの 2 つのオプションが最適です。

于 2010-03-15T19:19:56.887 に答える