浮く そして ダブル 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ビット を保管するために使用されます 仮数。
例
メモリに保存したい 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ビット を保管するために使用されます 仮数。
例
同じ数字 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 を使用します。アプリケーションの要件に基づいて、適切なデータ型を選択することが重要です。