4

浮動小数点数の末尾に f を付けると、コンパイラはそれが double ではなく float であることを認識できるようになります。これは、double ではなく float を操作するときに不要なキャストを防ぐために重要です。ただし、外部企業から提供された一部のコードでは、たとえば次のようなものを見てきました。

double i = 1.4f;

さて、気になるのはこの場合どうなるのか?コンパイラは「f」を黙って無視しますか?それは何にも関係のないものであり、安全に無視できますか?

次に、初期化時だけでなく、他の場所で f サフィックスが付いた double に数値が割り当てられている場合、それは異なる動作をする別のケースになるのではないかと思いましたか?

4

2 に答える 2

11

C 標準からの関連する引用:

§6.4.4.2 パラグラフ 4

f または F の文字を接尾辞として付けると、float 型になります。

パラグラフ5

浮動定数は、変換時のように内部形式に変換されます。

パラグラフ7

浮動定数の変換時の変換は、strtod などのライブラリ関数による文字列の実行時の変換と一致する必要があります。ただし、両方の変換に適した一致する入力、同じ結果形式、およびデフォルトの実行時の丸めが与えられます。

IEEE-754 数値1.4fが次の値を生成すると仮定します。

1.39999997615814208984375

一方1.4、値は次のとおりです。

1.399999999999999911182158029987476766109466552734375.
于 2012-05-10T14:16:38.653 に答える
3

優れたコンパイラは、1.4f を double に直接変換する必要があります。

準拠したコンパイラは、1.4f をfloatformat に変換しdouble、次に値を に変換してから、値を に割り当てますi

ところで、歴史的に FORTRAN の時代から、名前付き変数はi通常整数値を保持します。

于 2012-05-10T14:11:53.783 に答える