IEEE 754 の基本
IEEE 754 浮動小数点標準は、数値を次の形式に編成します:
非正規数
エンジニアは懸念事項に対処するために非正規数を実装しました。 2 進数表現では、0.0 を除くすべての数値の先頭に 1 が付きます。この先頭ビットの精度の無駄を避けるために、「先頭ビット規則」が作成されました。
ただし、これにより、ゼロ以外の最小の数値が以前の標準よりも大きくなります。エンジニアは、例外として非正規数を導入しました。
これにより、最小の非正規化よりも小さい数値の表現が可能になります。 value.
非正規数のトレードオフ
非正規数は、精度と表現長の間のトレードオフを表します。数値が小さいほど精度は低下しますが、表現される値の数は 2 倍になります。
視覚化
幾何学的に、非正規化は指数 0 の範囲を拡張し、数値に使用できるスペースを 2 倍にします。
の実装Subnormals
C float は、ほとんどのデスクトップ マシンで 32 ビット IEEE 754 数値を表します。 C プログラムの例では、非正規数のプロパティを示します。
#include <assert.h> #include <inttypes.h> #include <math.h> #include <stdlib.h> #include <stdio.h> typedef struct {...} Float32; // Represents the 32-bit floating point float float_from_bytes(..., uint32_t fraction); // Reconstructs float from individual parts bool float32_equal(float f, uint32_t sign, uint32_t exponent, uint32_t fraction); // Compares float to individual parts int main() { assert(float32_equal(0.5f, 0, 126, 0)); assert(isnormal(0.5f)); ... // More assertions return EXIT_SUCCESS; }
実装における非正規
一部のプラットフォームでは、非正規数の実装効率が低い場合があります。 ARMv8 は、パフォーマンスの最適化のために非正規化がゼロに丸められる「フラッシュ トゥ ゼロ」モードを提供します。
非正規化と非正規化
非正規化と非正規化は同義語です。
その他の特殊な番号ケース
以上が非正規数が精度と表現長の間でトレードオフになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。