当浮点数大于其精度时,它叫什么?

时间:2015-09-27 19:56:42

标签: c floating-point precision

在单点精度中,有一个23位的有效位给出一个整数范围(如果我们只存储一个离散的整数值),最多为2 ^ 24。指数为8位,最大范围为2 ^ 127。在大幅度数字处,有一点它们开始从有效数字/尾数中丢失有效数字。

这意味着像(2 ^ 32 + 2 ^ 8)的数字:
4294967552个
0x100000100
0b100000000000000000000000100000000
将被简单地存储为:
指数0b00100000
有效数字/尾数0b00000000000000000000000(1执行位)
从精确度上减去256。

这似乎与所谓的“次正常”数字相反。基本上,在有效数中存储为整数的数字范围远小于考虑指数时能够存储的数字范围。所以,一旦你到达2 ^ 24,你就会开始失去信息(可能我会误解标准)!当有一个有效数据但指数小于2 ^ -127的信息丢失时,这似乎与在低于正常范围时发生的情况相反。

我对IEEE754标准的理解是否遗漏了什么? 如果不是这种情况在大幅度数字失去精确度时被调用(这似乎与次正规相反,也许是“超常”)? 为了保持精度,我应该将所有浮点数限制为 - (10 ^ 7)< x< 10 ^ 7?

EDIT 更新了100,000,010的数字,我还添加了更多语言来解释我的理解。

编辑2 @Weather Vane并且是正确的。浮点精度的一点是,一旦我们开始增加幅度,它就会在分数刻度上失去精度,当幅度增加超过有效数字末尾的小数点时,这开始影响整数刻度。 0.0000000000000000000001 - > - > 10000000000000000000000.0 我可以看出为什么指数比有效数字大得多,以便将超小数字表示为可能的最大精度,但对于大数字,似乎有一整类数字在我们去的时候以大于分数的比例丢失信息超过23 sig fig in binay。我想知道这些被称为什么,如果他们甚至有一个名字,例如“超级正常”?

1 个答案:

答案 0 :(得分:2)

当不能用浮点格式表示实数的所有数字时发生的事情的名称只是“四舍五入”。

表示整数的情况有点特殊,因为在典型的浮点格式中,所有小整数都可以精确表示,特别是没有整数太接近于零而无法准确表示。

然而,由于这个问题暗指了次正规数,因此更普遍地认为达到溢出的次正常区域的双重性是正确的。一种看待这种情况的方法是,在单精度IEEE 754数字的整个正常范围内,有效精度为24位,当数字过于接近零(低于正常范围)并且精度降低到0时精度逐渐减小。当溢出时(+ inf和-inf),所有位都是一次性的。

由于问题是关于表示整数(参见注释),在单精度IEEE 754中任何整数x使得-2 24 < = x< = 2 24 可以安全地表示(即[-16777216 ... 16777216])。 16777217是无法以单精度精确表示的最小正整数(最近 - 偶数规则意味着它向下舍入到16777216.0)。

浮点解决了表示一些不是整数的实数的一般问题,以及一些大于所有整数可表示的最大整数的实数(这里是16777216),所有都带有几乎统一的相对准确度(至少1/2 精度)。