ホームページ >バックエンド開発 >C++ >非正規浮動小数点数が存在するのはなぜですか?

非正規浮動小数点数が存在するのはなぜですか?

DDD
DDDオリジナル
2024-11-11 07:42:03314ブラウズ

Why Do We Have Subnormal Floating Point Numbers?

非正規浮動小数点数

浮動小数点数は、IEEE 754 標準に従って編成されます。単精度の場合、形式は符号に 1 ビット、指数に 8 ビット、小数部に 23 ビットで構成されます。指数には -127 のバイアスがかかっているため、0 は 2^-126 を表し、1 は 2^-125 を表します。

「先頭ビット規則」では、0.0 を除くすべての数値が 2 進数の 1 で始まると想定しています。これにより、先頭の桁の精度ビットの無駄が回避されます。ただし、指数ビットと小数ビットの両方が 0 に等しい 0.0 の例外が作成されます。

その結果、表現できる最小の非ゼロ数値は 1.0 × 2^-126 になります。さらに小さい数値を表すために、エンジニアは非正規数を導入しました。この数値は、先頭ビットが 0 で、指数が -126 に固定されています。

最大の非正規数は 0.FFFFFE × 2^-126 で、これは非常に近い値です。最小の非正規数に変換します。ゼロ以外の最小の非正規数は 0.000002 × 2^-126 で、これは 0.0 にさらに近づきます。

非正規数は、精度と表現長の間のトレードオフです。たとえば、ゼロ以外の最小の非正規数の精度は 1 ビットのみであるため、それを 2 で割ると正確に 0.0 になります。

ビジュアライゼーションでは、非正規数は指数 0 の範囲の長さを 2 倍にし、その範囲を半分にします。非正規のないシステムと比較した、その範囲内のポイントの数。これにより、表現可能な数値空間にいくつかのギャップが生じます。

C では、float データ型は単精度 IEEE 754 浮動小数点数を表します。非正規数は isnormal() 関数を使用して識別できます。この関数は非正規数の場合は false を返し、正規の数の場合は true を返します。

以上が非正規浮動小数点数が存在するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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