logo

C Float と Double

浮く そして ダブル C プログラミングの 2 つの基本的なデータ型で、格納するために使用されます。 10 進数値 。どちらも浮動小数点数を格納しますが、値を格納できる精度のレベルが異なります。

この記事では、それぞれの記憶表現、およびそれらの違いについて詳しく説明します。



浮く

Float は、単精度浮動小数点数を格納するために使用されます。小数点以下 6 ~ 7 桁までの精度で 10 進数値を保存できます。

構文

 float var_name ;>
  • フロートのサイズは、 4バイト。
  • Float は次のような値を保存できます。 3.4×10-383.4倍まで 1038
  • までの値を保存できます 小数点以下 7 桁 精度を損なうことなく。
  • float の形式指定子は次のとおりです。 %f。

C




Javaのエスケープ文字





mysqlワークベンチの使い方
// C Program to illustrate float> #include> > int> main()> {> >// Syntax of declaring and initializing> >// the float variable> >float> myVariable = 789.123456f;> > >// printing floating point number> >printf>(>'Float value is %f'>, myVariable);> >return> 0;> }>

>

>

出力

Float value is 789.123474>

上記の出力からわかるように、float のビットが制限されているため、10 進数の精度は 7 桁目以降で失われます。このような場合には、double データ型をお勧めします。

注記: デフォルトでは、すべての実数リテラルは double 型です。を追加できます f リテラルの最後に を追加して float 型として定義します。

ダブル

Double は、倍精度浮動小数点値を格納するために使用されます。これは、小数点以下 15 桁までの精度で実数を格納できる float の上位バージョンです。

  • ダブルのサイズは、 8バイト。
  • doubleの範囲は 1.7×10-308~1.7×10+308
  • までの値を保存できます 小数点以下15桁 精度を損なうことなく。
  • double の形式指定子は次のとおりです。 %lf

C




C言語の行列

#include> > int> main()> {> >// Syntax of declaring and initializing> >// the double variable> >double> myVariable = 789.123456;> >printf>(>'Double value is %lf'>, myVariable);> >//%lf or %f both can be used to> >// print Float values> >return> 0;> }>

>

Linuxコマンド

>

出力

Double value is 789.123456>

float と double はどのように格納されるのでしょうか?

C言語は以下に続きます。 IEEE 754規格 メモリ内の浮動小数点値を表すために使用されます。バイナリ形式で直接メモリに格納される int 型とは異なり、float 値は指数部と仮数部の 2 つの部分に分割されて格納されます。

IEEE 754 によれば、浮動小数点値は 3 つのコンポーネントで構成されます。

    符号ビット: これは数値の符号を表します。 0 は正を表し、1 は負を表します。バイアス付き指数: 数値の指数は負にも正にもなり得るため、直接保存することはできません。そのため、指数にバイアスを追加するバイアス付き指数を使用します。正規化された仮数: マティッサは科学的表記法の数値、つまり数値の精度ビットです。

C の float メモリ表現

float のサイズは 32 ビットで、そのうち次のとおりです。

    最上位ビット (MSB) は、 サイン 番号の。
  • 次は 8ビット を保管するために使用されます 指数。
  • 残り 23ビット を保管するために使用されます 仮数。
float のメモリ表現

メモリに保存したい 10 進数として 65.125 を考えてみましょう。

Converting to Binary form, we get: 65 = 1000001 0.125 = 001 So, 65.125 = 1000001.001 = 1.000001001 x 106 Normalized Mantissa = 000001001 Now, according to the standard, we will get the baised exponent by adding the exponent to 127, = 127 + 6 = 133 Baised exponent = 10000101 And the signed bit is 0 (positive) So, the IEEE 754 representation of 65.125 is, 0 10000101 00000100100000000000000>

C ダブルメモリ表現

float のサイズは 32 ビットで、そのうち次のとおりです。

文字列を int java にキャストします
    最上位ビット (MSB) は、 サイン 番号の。
  • 次は 11ビット を保管するために使用されます 指数。
  • 残り 52ビット を保管するために使用されます 仮数。
double のメモリ表現

同じ数字 65.125 の例を見てみましょう。

From above, 65.5 = 1.000001001 x 106 Normalized Mantissa = 000001001 Now, according to the standard, bais is 1023. So, = 1023 + 6 = 1029 Baised exponent = 10000000101 And the signed bit is 0 (positive) So, the IEEE 754 representation of 65.125 is, 0 10000000101 0000010010000000000000000000000000000000000000000000>

float と double の違い

ポイント

浮く

ダブル

精度 Float は、小数点以下 7 桁までの精度を提供する単精度 IEEE 754 浮動小数点です。 Double は、小数点以下 15 桁までの精度を提供する倍精度 IEEE 754 浮動小数点です。
メモリ使用量 Float は 32 ビットまたは 4 バイトのメモリを使用します。 Double は 64 ビットまたは 8 バイトのメモリを使用します。
範囲 Float は 3.4 x 10 までの範囲の値を保存できます-383.4×10まで+38 doubleの範囲は1.7×10です-308~1.7×10+308
フォーマット指定子 %f は float の形式指定子です。 %lf double の形式指定子です。
記憶の表現 符号 = 1 ビット
指数 = 8 ビット
仮数 = 23 ビット
符号 = 1 ビット
指数 = 11 ビット
仮数 = 52 ビット

結論

結論として、C は 10 進数に float と double の両方を使用しますが、精度、メモリ使用量、範囲、速度の点で異なります。スペースが限られており、精度が犠牲になる可能性がある場合は、float を使用することをお勧めします。一方、スペースが問題にならない高精度アプリケーションには double を使用します。アプリケーションの要件に基づいて、適切なデータ型を選択することが重要です。