为了账号安全,请及时绑定邮箱和手机立即绑定

在16位、32位和64位IEEE-754系统中,可以表示什么范围的数字?

在16位、32位和64位IEEE-754系统中,可以表示什么范围的数字?

在16位、32位和64位IEEE-754系统中,可以表示什么范围的数字?我知道浮点数是如何表示的,但恐怕还不够。总的问题是:对于给定的精度(就我的目的而言,基数10中的精确小数位数),16位、32位和64位IEEE-754系统的数字范围是多少?具体来说,我只对精确到+/-0.5(1位)或+/-0.0005(千分之一位)的16位和32位数字的范围感兴趣。
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

为某一给定IEEE-754浮点数X,如果

2^E <= abs(X) < 2^(E+1)

那么距离X到下一个可表示的最大浮点数(埃普西隆)是:

epsilon = 2^(E-52)    % For a 64-bit float (double precision)
epsilon = 2^(E-23)    % For a 32-bit float (single precision)
epsilon = 2^(E-10)    % For a 16-bit float (half precision)

根据上述方程式,我们可以计算出下列各点:

  • 半精度...

    如果您希望获得+/-0.5(或2^-1)的精度,则该数字的最大大小为2^10。任何大于此的值,浮点数之间的距离都大于0.5。

    如果您想要一个+/-0.0005的精度(大约2^-11),那么这个数字的最大大小是1,任何大于这个值的值,浮点数之间的距离都大于0.0005。

  • 单精度...

    如果希望精度为+/-0.5(或2^-1),则该数字的最大大小为2^23。任何大于此和浮点数之间的距离都大于0.5。

    如果您希望获得+/-0.0005(约2^-11)的精度,则该数字的最大大小为2^13。任何大于此的值和浮点数之间的距离都大于0.0005。

  • 双精度...

    如果希望精度为+/-0.5(或2^-1),则该数字的最大大小为2^52。任何大于此和浮点数之间的距离都大于0.5。

    如果要获得+/-0.0005(约2^-11)的精度,则该数字的最大大小为2^42。任何大于此和浮点数之间的距离都大于0.0005。


查看完整回答
反对 回复 2019-07-06
?
Qyouu

TA贡献1786条经验 获得超11个赞

对于浮点整数(我将用ieee双精度给出我的答案),1到2^53之间的每一个整数都是完全可表示的。在2^53以上,完全可表示的整数通过增加2的幂来分隔。例如:

  • 2^53+2和2^54之间的第二个整数可以精确表示。
  • 2^54+4和2^55之间的第四个整数可以精确地表示。
  • 2^55+8和2^56之间的每8个整数都可以精确地表示。
  • 2^56+16和2^57之间的每16个整数都可以精确地表示。
  • 在2^57+32和2^58之间的每32个整数都可以精确地表示。
  • 2^58+64和2^59之间的每64个整数都可以精确地表示。
  • 2^59+128和2^60之间的每128个整数都可以精确表示。
  • 在2^60+256和2^61之间的每256个整数都可以精确地表示。
  • 2^61+512和2^62之间的每512个整数都可以精确表示。......

不完全可表示的整数被四舍五入到最近的可表示整数,因此最坏的情况是舍入为可表示整数之间的间隔的1/2。


查看完整回答
反对 回复 2019-07-06
?
largeQ

TA贡献2039条经验 获得超7个赞

从Peter R的链接到MSDN Ref的精确引用可能是一个很好的经验法则,但当然现实要复杂得多。

“浮点”中的“点”是双星小数点而不是小数点有一种方法可以打败我们的直觉。典型的例子是0.1,它只需要一个小数位数的精度,但根本不能用二进制表示。

如果你有周末要消磨时间,看看关于浮点算法,每个计算机科学家都应该知道些什么?..您可能特别感兴趣的是精密度二进制到十进制转换.


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 1164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信