所以双精度在MATLAB中需要64位。我知道0或1会占一个位。
但是当我输入realmax('double')时,我得到一个非常大的数字1.7977e+308。这个数字怎么能只保存在64位?
希望得到任何澄清。谢谢。
这是 不 一道MATLAB题。64位IEEE 754双精度二进制浮点格式用这种格式表示。
bit layout:
| 0 | 1 | 2 | ... | 11 | 12 | 13 | 14 | ... | 63 |
| sign | exponent(E) (11 bit) | fraction (52 bit) |
第一位是符号
0 => +
1 => -
接下来的11位用来表示指数。因此,我们可以把整数写成+2^10-1=1023。等等......这听起来并不好! 为了表示大数,所谓的 偏颇 中使用,其值表示为。
2^(E-1023)
其中E是指数的代表。说,指数位是这样的例子。
Bit representation of the exponent:
Bit no: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
Example 1: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Example 2: | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Example 3: | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Example 4: | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
Example 5: | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Base 10 representation:
Example 1 => E1: 1
Example 2 => E2: 32
Example 3 => E3: 515
Example 4 => E4: 2046
Example 5 => E4: Infinity or NaN (**** Special case ****)
Biased form:
Example 1 => 2^(E1-1023) = 2^-1022 <= The smallest possible exponent
Example 2 => 2^(E2-1023) = 2^-991
Example 3 => 2^(E3-1023) = 2^-508
Example 4 => 2^(E4-1023) = 2^+1023 <= The largest possible exponent
Example 5 => 2^(E5-1023) = Infinity or NaN
当E遇到 0 < E < 2047 那么这个数字就被称为归一化数字,用以下公式表示。
Number = (-1)^sign * 2^(E-1023) * (1.F)
但如果E为0,那么这个数字就被称为去标准化数字,用以下公式表示:
Number = (-1)^sign * 2^(E-1022) * (0.F)
现在 F 基本上是由分数位决定的什么。
// Sum over i = 12, 13, ..... , 63
F = sum(Bit(i) * 2^(-i))
和 位(i) 指数字的第i位。举例说明。
Bit representation of the fraction:
Bit no: | 12 | 13 | 14 | 15 | ... ... ... ... | 62 | 63 |
Example 1: | 0 | 0 | 0 | 0 | 0 ... .... 0 | 0 | 1 |
Example 2: | 1 | 0 | 0 | 0 | 0 ... .... 0 | 0 | 0 |
Example 3: | 1 | 1 | 1 | 1 | 1 ... .... 1 | 1 | 1 |
F value assuming 0 < E < 2047:
Example 1 => 1.F1 = 1 + 2^-52
Example 2 => 1.F2 = 1 + 2^-1
Example 3 => 1.F3 = 1 + 1 - 2^-52
但是当我输入realmax('double')时 我得到一个非常大的数字1. 7977e+308. 这个数字怎么能只保存在64位呢?
realmax('double')
'的二进制表示方法是
| sign | exponent(E) (11 bit) | fraction (52 bit) |
0 11111111110 1111111111111111111111111111111111111111111111111111
哪些是
+2^1023 x (1 + (1-2^-52)) = 1.79769313486232e+308
我从这个中提取了一些定义和例子 维基百科页面.