双精度

问题描述 投票:0回答:1

所以双精度在MATLAB中需要64位。我知道0或1会占一个位。

但是当我输入realmax('double')时,我得到一个非常大的数字1.7977e+308。这个数字怎么能只保存在64位?

希望得到任何澄清。谢谢。

matlab variables
1个回答
3
投票

这是 一道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

我从这个中提取了一些定义和例子 维基百科页面.

© www.soinside.com 2019 - 2024. All rights reserved.