1. ホーム
  2. c

[解決済み] C 言語の浮動小数点数リテラルを double ではなく float にする。

2023-07-06 13:19:42

質問

C言語では、浮動小数点数リテラル(例. 1.23 など)は double . その結果,それらを含む計算はすべてdoubleに昇格します.

私は単精度のみをサポートする浮動小数点ユニットを持つ組み込みリアルタイムシステムで作業しています ( float ) 数値のみをサポートする浮動小数点ユニットを持つ組み込みリアルタイムシステムに取り組んでいます。私の変数はすべて float で、この精度で十分です。必要ない(余裕がない)のは double はまったく必要ありません。しかし、次のようなものがあるたびに

if (x < 2.5) ...

が書かれると、災難が起こります。速度が最大で2桁も低下することがあります。もちろん、直接的な回答は

if (x < 2.5f) ...

が、これはとても見逃しやすく(手遅れになるまで発見しにくい)、特に「設定」値が #define を別のファイルに書き込んだ場合、特にそうです。

では、コンパイラがすべての (浮動小数点) リテラルを float として扱うように強制する方法はあるのでしょうか。 f ? 仕様に反していても構わないので。あるいは、他の解決策があれば教えてください。ちなみにコンパイラはgccです。

どのように解決するのですか?

-fsingle-precision-constant フラグを使用することができます。これは、浮動小数点数の定数が正確でない場合でも単精度でロードされるようにします。

注- 倍精度変数に対する演算でも単精度定数が使用されます。