float64 の "%b" について
fmt.Printf の float64 値の "%b" 形式指定子は浮動小数点を表します2 の補数の指数を使用した 2 進科学表記の数値。この表記では、数値は仮数 (仮数) に 2 のべき乗を乗じて指数化したものとして表され、どちらもバイナリ形式で表されます。
たとえば、 fmt.Printf("% bn", 1.0) が実行されると、出力 4503599627370496p-52 が生成されます。これは次のことを示します:
デコードすると、仮数
仮数 (または仮数) は 53 ビットの浮動小数点数です。 2 進数では、次のように表すことができます。
0.11111111111110000000000000000000000000000000000000000000000000
この 2 進数の仮数部を 10 進数に変換するには、2^(1 - 指数) を掛けます。
この場合、指数はは -52 であるため、
0.11111111111110000000000000000000000000000000000000000000000000 * 2^(1 - (-52)) = 0.11111111111110000000000000000000000000000000000000000000000000 * 2^(53) = 1.0
したがって、仮数部は値を表します1.
指数のデコード
指数は 11 ビットの符号付き整数です。浮動小数点数の標準 IEEE 754 バイナリ表現では、偏りのある指数が使用されます。正の値は実際の指数を表し、負の値は非正規数を示します。
指数 -52 については、偏りのない指数を計算します。 exponent:
Unbiased exponent = Biased exponent - 1023 = -52 - 1023 = -1075
この負の値は非正規数を示します。非正規数は、正規化された指数範囲を使用して表現するには小さすぎる数値を表すために使用されます。
Float64 値の計算
仮数部と指数を組み合わせると、 float64を計算できるvalue:
value = significand * 2^(exponent) = 1.0 * 2^(-1075) = 5e-324
最小非正規正 Double について
最小非正規正 Double 値は、1.0 未満の最小の正 Double 値です。 16 進表現は 0x0000000000000001 です。
この 16 進値をバイナリに変換します:
0000000000000000000000000000000000000000000000000000000000000001
このバイナリ表現は次のように分解できます:
前と同じ計算を使用:
value = significand * 2^(exponent) = 1.0 * 2^(-1022) = 5e-324
したがって、最小の非正規正の double 値は次のようになります。 5e-324.
以上がGo の `fmt.Printf` では、`%b` 形式指定子はどのように float64 値を表しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。