浮動小数点数の表現範囲

清浅
清浅オリジナル
2019-03-08 15:57:2237720ブラウズ

浮動小数点数は、記号、指数、仮数の 3 つの部分で構成されます。浮動小数点数は、単精度浮動小数点数と倍精度浮動小数点数に分けられます。単精度浮動小数点数の範囲は -3.4E38 ~ 3.4E38、倍精度浮動小数点数の範囲は -1.79E 308 ~ 1.79E 308

浮動小数点数の表現範囲

[推奨コース: JavaScript チュートリアル]

浮動小数点数表現

浮動小数点数 (浮動小数点数) は、符号、指数という 3 つの基本コンポーネントで構成されます。そして仮数部。浮動小数点数は通常、次の形式で表すことができます:

#S PM
ここで、S は符号ビット、P は指数コード、M は仮数です。

IEEE (電気電子技術者協会) 754 標準の定義によれば、単精度浮動小数点数は 32 ビット (つまり 4 バイト)、倍精度浮動小数点数は 32 ビット (つまり 4 バイト) です。 64 ビット (つまり 8 バイト)。 S、P、M が占める桁数と 2 つの表現方法を次の表に示します。

#S P M 式を表しますオフセット 単精度浮動小数点数1 (31 位) 8 (30 位から 23 位) 23 (22 位から 0 位) (-1)^S*2 (P-127) *1.M127 倍精度浮動小数点数1(63ビット目) 11 (62 ~ 52 ビット)52 (桁 51 ~ 0)(-1)^S*2(P-1023)*1.M1023

このうち、S は符号ビットで、それぞれ正と負を示す 0 と 1 のみです

P は順序コードで、通常はフレームコードで表されます (フレームコードと補数コードには符号のみが付きます)正の数の場合、元のコードと補数と補数は同じです。負の数の場合、補数は元のコードの絶対値をすべて反転し、1 を加算したものです) 。指数コードは正の数でも負の数でも構いませんが、負の指数の場合に対応するには、指数フィールドに格納される値として実際の指数値にバイアス (Bias) 値を必要に応じて加算する必要があります。単精度数値のバイアス値は 127、倍精度数値の偏差値は 1023 です。たとえば、単精度の実際の指数値 0 は、指数フィールドに 127 として格納されますが、指数フィールドに格納された 64 は、実際の指数値 -63 を表します。バイアスの導入により、単精度数値が次のようになります。実際に指数値を表現します。範囲は-127~128(両端含む)となります。

M は仮数で、単精度数値の長さは 23 ビット、倍精度数値の長さは 52 ビットです。 IEEE 標準では、浮動小数点数が正規である必要があります。これは、仮数の小数点の左側が 1 でなければならないことを意味するため、仮数を保存するときに小数点の前の 1 を省略できるため、バイナリ ビットを解放してより多くの仮数を保存できます。これは実際には、23 ビット長の仮数フィールドを使用して 24 ビットの仮数を表現します。たとえば、単精度数値の場合、2 進数 1001.101 (10 進数の 9.625 に相当) は 1.001101 × 23 として表現できるため、仮数フィールドに実際に格納される値は 00110100000000000000000 になります。つまり、小数点の左側の 1 は次のようになります。が削除され、右側に 0 が使用されます。完了です。
標準要件に従って、正確に保存できない値は、保存可能な最も近い値に四捨五入する必要があります。つまり、半分より小さい場合は四捨五入され、半分より大きい場合 (半分を含む) )、丸められます。ただし、2 進浮動小数点数の場合は、もう 1 つルールがあります。つまり、四捨五入する必要がある値がちょうど半分の場合、単純に四捨五入されるのではなく、等距離に近い 2 つの保存可能な値のうちの最後の 1 つが丸められます。前後を取得し、有効桁数は0です。

上記の分析によると、IEEE 754 標準では、浮動小数点数の表現範囲を次のように定義しています。



Binary (2 進数) Decimal(10 進数)
単精度浮動小数点数 ± (2-2^-23) × 2127 ~ ± 10^38.53
倍精度浮動小数点数 ± (2-2^-52) × 21023 ~ ± 10^ 308.25

浮動小数点数の表現には一定の範囲があり、その範囲を超えるとオーバーフロー(Flow)が発生します。一般に絶対値の最大値より大きいデータをオーバーフロー(Overflow)、絶対値の最大値より小さいデータをオーバーフロー(Overflow)と呼びます。絶対値が最も小さいことをアンダーフロー(Underflow)と呼びます。

浮動小数点数の表現規則

単精度浮動小数点数と倍精度浮動小数点数は両方とも IEEE 754 標準で定義されています。例:
1. P=0、M=0 の場合、0 を意味します。
2. P=255、M=0の場合は無限大を意味し、正の無限大か負の無限大かを判断するために符号ビットが使用されます。
3. P=255かつM≠0の場合、NaN(Not a Number、非数)を意味します。
非標準の浮動小数点数

絶対値が極端に小さい 2 つの浮動小数点数を減算すると、その差の指数が許容範囲を超える場合があり、最終的にはほぼ 0 になるだけです。このような問題を解決するために、IEEE 標準は非正規化浮動小数点数を導入しました。これは、浮動小数点数の指数が許容される最小指数値である場合、仮数を正規化する必要がないことを規定しています。非標準浮動小数点数では、仮数ビットの暗黙の制限がなくなり、絶対値が小さい浮動小数点数を格納できるようになります。さらに、暗黙の仮数フィールドによる制限がなくなるため、保存できる浮動小数点数間のすべての差分も保存できるため、極度に小さい差分に関する上記の問題は存在しません。
IEEE 754 標準の定義によれば、正規浮動小数点数と非正規浮動小数点数の表現範囲は次の表のように要約できます。

## 正規浮動小数点数 #10 進近似範囲 ± 2^-149 から (1-2^-23)*2^-126± 2^-1074 ~ (1-2^-52) )*2^-1022#IEEE 754 に関連する規格

#非正規浮動小数点数 ##単精度浮動小数点数
± 2^-126 から (2-2^-23)*2^127 ± ~10^-44.85 ~ ~10^38.53 倍精度浮動小数点数
± 2^-1022 から (2-2^-52)*2^1023 ± ~10^-323.3 から ~10^308.3
この記事の結論は IEEE 754 標準に基づいています。もう 1 つの規格は IEEE 854 です。 10 進浮動小数点数に関するものですが、特定の形式が指定されていないため、使用されることはほとんどありません。さらに、2000 年から、IEEE 754 と IEEE 854 標準を統合する目的で、IEEE 754R として知られる IEEE 754 の改訂が始まりました。この標準の浮動小数点形式の改訂には、1. 16 ビットおよび 128 ビットの 2 進浮動小数点形式の追加、2. 10 進浮動小数点形式の追加、および IBM が提案する形式の採用が含まれます。

要約: 以上がこの記事の全内容です。皆様のお役に立てれば幸いです。

以上が浮動小数点数の表現範囲の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

関連記事

続きを見る