float 型

浮動小数点数が IEEE (米国電気電子技術者協会) 形式を使用します。 Float 型の単精度値は、符号ビット、余分な 127 形式 (8 ビット) 2 進指数、および 23 ビットの仮数から成る 4 バイトを持ちます。 仮数は、1.0 と 2.0 の間の数字を表します。 仮数の上位ビットは常に 1 であるため、数に格納されません。 この表現は、float 型のために、約 3.4E-38 から 3.4E+38 の範囲を提供します。

アプリケーションの必要に応じて、float または double として変数を宣言できます。 2 つの型も主な相違点は、それらが表すことのできる重要性、必要とするストレージ、および範囲です。 重要性とストレージ要件のリレーションシップを次の表に示します。

浮動小数点型

種類 有効桁数 バイト数
float 6 - 7 4
double 15 - 16 8

浮動小数点変数は、数の値を含む仮数と、数の桁を含む指数によって表されます。

次の表は、各浮動小数点型の仮数と指数に割り当てられたビット数を示します。 float または double の最上位ビットに常に符号ビットです。 1 の場合、数値は負の数と見なされます。それ以外の場合は、正の数と見なされます。

指数と仮数の長さ

種類 指数の長さ 仮数の長さ
float 8 ビット 23 ビット
double 11 ビット 52 ビット

指数は符号なしの形式で格納されるため、指数はその有効値の半分でバイアスされます。 バイアスは、float 型の場合は 127 で、double 型の場合は 1023 です。 指数値からバイアス値を減算して、実際の指数値を計算できます。

仮数は 1 以上 2 未満の 2 進小数として格納されます。 float 型と double 型の場合、最上位ビット位置の仮数部の先頭に暗黙の 1 があるため、最上位ビットがメモリに保存されることがなくても、実際の仮数はそれぞれ 24 ビットと 53 ビットの long になります。

ここで説明したストレージ メソッドではなく、浮動小数点パッケージは、非正規化数としてバイナリ浮動小数点数を格納できます。 "非正規化数" は、仮数の最上位ビットが 0 で、指数部の値が予約済みであるゼロ以外の浮動小数点数です。 非正規化形式を使用することで、浮動小数点数の範囲は精度を犠牲にして拡張できます。 浮動小数点数が、正規化形式と非正規化形式のどちらで表されるかは制御できません。表現は浮動小数点パッケージで決定されます。 浮動小数点パッケージは、指数が正規形式で表すことができる最小数未満にならない限り、非正規化形式を使用しません。

次の表は、各浮動小数点型の変数に格納できる最小値と最大値を示します。 この表に示す値は、正規化浮動小数点数にのみ適用されます。非正規化浮動小数点数には、より小さい最小値があります。 80x87 レジスタに保持される数値は、必ず 80 ビットの正規形式で表されます。32 ビットまたは 64 ビットの浮動小数点変数 (float 型と long 型の変数) に格納された数値は非正規形式でしか表せないことに注意してください。

浮動小数点型の範囲

種類 最小値 最大値
フローティング 1.175494351 E - 38 3.402823466 E + 38
double 2.2250738585072014 E - 308 1.7976931348623158 E + 308

精度がストレージよりも低い場合、浮動小数点変数に float 型を使用することを検討してください。 逆に、精度が最も重要な条件である場合は、double 型を使用します。

浮動小数点変数は有効桁数の大きな型に上位変換できます (float 型から double 型)。 上位変換は、浮動小数点変数の算術演算を実行すると頻繁に発生します。 この演算は常に、最高精度の変数と同じ高い精度で実行されます。 たとえば、次の型宣言について考えてみます。

float f_short;
double f_long;
long double f_longer;

f_short = f_short * f_long;

前の例では、変数 f_short は double 型に上位変換され、f_long で乗算されます。したがって結果は、f_short に割り当てられる前に、float 型に丸められます。

次の例 (前の例の宣言を使用) では、演算は、変数の浮動 (32 ビット) 精度で実行され、結果は、double 型に上位変換されます。

f_longer = f_short * f_short;

関連項目

基本型の格納