最大的非规范化数和规范化数是什么?(64位,IEEE 754-1985)

7

我在浮点运算方面遇到了困难,因为我真的想理解这个主题!

我知道数字可以用科学计数法表示。

所以对于这两个数字,指数应该如下:

非规格化数: 11....11 所以 (1+1/2 + 1/2^2 + ... + 1/2^52)*2^1023

规格化数: 11....11 所以 (1+1/2 + 1/2^2 + ... + 1/2^52)*2^1024

然而,我不确定这是否正确?

我真的很感谢你的回答!

附注:在维基百科上给出了数字! 然而,我不知道他们是如何得出这个结果的...


请参阅此问题,深入讨论denormal和处理它们的方法:https://dev59.com/yGox5IYBdhLWcg3wSCRW - fig
1个回答

9
如您所知,双精度浮点数格式如下图所示: enter image description here 理解非规格化数的关键在于它们实际上并不是浮点数,而是使用“普通”格式中未使用的表示方式来使用固定点微格式。
“普通”浮点数的形式为:m*2^e,其中e通过从上面的指数字段中减去偏置得到,m是介于1和2之间的数字,二进制小数点后的位由上述分数给出。存储时,前导的1不会被保存,因为它总是1。指数字段的值从1到2046。值0(全0)和2047(全1)保留用于特殊用途。
指数字段中的所有1意味着我们有无穷大或NaN(非数字)。
全0意味着我们正在处理“非规格化”浮点数。这些仍然具有相同的形式m*2^e,但是m和e的值是按不同方式派生的。m现在是介于0和1之间的数字,因此二进制小数点前面有一个0,而不是常规数的1。e始终具有相同的值:-1022。因此,指数是恒定的,这就是我之前称之为固定点格式的原因。
因此,每个值的最大可能值为:
- 普通数:(1 + 1/2 + 1/2^2 + ... + 1/2^52)*2^1023 = (2-2^-52)*2^1023 = 1.797...e+308 - 非规格化数:(0 + 1/2 + 1/2^2 + ... + 1/2^52)*2^-1022 = (1-2^-52)*2^-1022 = 2.225...e-308

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接