38

私は浮動小数点の範囲について話しているCの本を読んでいます。著者は次の表を提供しました:

Type     Smallest Positive Value  Largest value      Precision
====     =======================  =============      =========
float    1.17549 x 10^-38         3.40282 x 10^38    6 digits
double   2.22507 x 10^-308        1.79769 x 10^308   15 digits

最小の正の値と最大の値の列の数値がどこから来たのかわかりません。

4

6 に答える 6

31

32 ビットの浮動小数点数には 23 + 1 ビットの仮数部と 8 ビットの指数 (-126 から 127 が使用されます) があるため、表現できる最大の数は次のとおりです。

(1 + 1 / 2 + ... 1 / (2 ^ 23)) * (2 ^ 127) = 
(2 ^ 23 + 2 ^ 23 + .... 1) * (2 ^ (127 - 23)) = 
(2 ^ 24 - 1) * (2 ^ 104) ~= 3.4e38
于 2012-04-11T14:42:26.600 に答える
22

これらの数値は、浮動小数点数の標準表現を定義するIEEE-754標準に由来します。リンク先のウィキペディアの記事では、符号、仮数、および指数に使用されるビット数を把握して、これらの範囲に到達する方法について説明しています。

于 2012-04-11T14:37:19.783 に答える
8

floatデータ型の値は、次のように割り当てられる数を表すために、合計32ビットから取得されます。

1ビット:符号ビット

8ビット:指数p

23ビット:仮数

指数は、BIASが127、仮数が23ビット、24番目の隠しビットが1と見なされる場所として格納されp + BIASます。この隠しビットは仮数の最上位ビット(MSB)であり、指数は次のように選択する必要があります。 1.1。

これは、表現できる最小の数がであるということを意味し01000000000000000000000000000000ます1x2^-126 = 1.17549435E-38

最大値は011111111111111111111111111111111、であり、仮数は2 *(1-1 / 65536)であり、指数は127であり、を与え(1 - 1 / 65536) * 2 ^ 128 = 3.40277175E38ます。

ビットが次のとおりであることを除いて、同じ原則が倍精度に適用されます。

1ビット:符号ビット

11ビット:指数ビット

52ビット:仮数ビット

バイアス:1023

したがって、技術的には、制限は浮動小数点数を表すためのIEEE-754標準に由来し、上記はそれらの制限がどのように発生するかを示しています。

于 2012-04-11T15:04:42.850 に答える
2

dasblinkenlight が既に回答したように、数値は浮動小数点数が IEEE-754 で表現される方法から来ており、Andreas は数学の素晴らしい内訳を持っています。

ただし、IEEE-754 数値の精度は 2 進数の有効桁数に依存するため、浮動小数点数の精度は、表が示すように正確に 6 桁または 15 桁の 10 進数ではないことに注意してください。

  • float24 桁の有効な 2 進数があります。これは、表現される数値に応じて、10 進数で 6 ~ 8 桁の精度に変換されます。

  • double2 進数で 53 桁の有効桁数があり、これは 10 進数で約 15 桁です。

興味があれば、私の別の答えにさらに説明があります。

于 2012-04-11T14:49:44.350 に答える
1

これは、たとえば IEEE 754 のように、型の指数部分のサイズの結果です。float.h の FLT_MAX、FLT_MIN、DBL_MAX、DBL_MIN でサイズを調べることができます。

于 2012-04-11T14:40:39.283 に答える