【问题标题】:what is it called when a floating point number is larger than its precision?当浮点数大于其精度时,它叫什么?
【发布时间】:2015-12-25 01:26:26
【问题描述】:

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

这表示像 (2^32 + 2^8) 这样的数字:
4,294,967,552
0x100000100
0b1000000000000000000000000100000000
将简单存储为:
指数 0b00100000
有效数/尾数 0b00000000000000000000000(1 个实现位)
并从精度上损失 256。

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

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

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

编辑 2 @Weather Vane 是正确的。浮点精度的关键在于,一旦我们开始增加幅度,它就会在小数范围内失去精度,当幅度增加小数点超过有效数末尾时,这就会开始影响整数刻度
0.0000000000000000000001 ->-> 10000000000000000000000.0 我可以看到为什么指数比有效数字大得多,以便以尽可能最大的精度表示超小数字,但是对于大数量级的数字,似乎有一整类数字一旦我们去,就会以大于分数的比例丢失信息超过 23 sig 无花果在 binay。我想知道它们叫什么,如果它们甚至有名字,例如“超正常”?

【问题讨论】:

  • 请使用二进制或十六进制的值“100,000,010”,否则你会完全糊涂。二进制浮点表示不旨在保留十进制数字。将值转换为单精度时可能会丢失 10 个,或者可能不会丢失,或者可能会丢失超过 10 个。
  • 我明白,但只有当我们超过大约 7 个有效数字精度时,信息才会丢失,对吧?
  • 您在寻找“四舍五入”这个词吗?这是唯一想到的描述一种情况,在这种情况下,您尝试拟合无法以浮点格式精确表示的数字。舍入适用于所有值,无论大小,但对于整数,范围 -2^24
  • @lindsaymacvean 否,因为此格式可能无法准确表示数字。
  • 好吧,这与数字无关,我只是想找出一个更好的示例十进制数,当转换为浮点数时会丢失信息。为了便于说明,我将发布为二进制数。

标签: c floating-point precision


【解决方案1】:

当并非实数的所有数字都可以用浮点格式表示时发生的事情的名称就是“四舍五入”。

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

但是,由于该问题涉及次常数,因此认为进入次常领域的对偶溢出是更普遍的正确。看待这一点的一种方法是,在单精度 IEEE 754 数字的整个正常范围内,有效精度为 24 位,并且当数字太接近零(次正常范围)并且精度降低到 0 时,精度逐渐减小溢出时一次性全部位(+inf 和 -inf)。

由于问题是关于表示整数(参见 cmets),因此在单精度 IEEE 754 中任何整数 x 满足 -22424可以安全地表示(即 [-16777216 ... 16777216])。 16777217 是不能以单精度精确表示的最小正整数(最近偶数规则意味着它会向下舍入到 16777216.0)。

浮点解决了表示一些非整数实数的更普遍问题,以及一些大于所有整数可表示的最大整数(此处为 16777216)的实数,所有这些都具有几乎一致的相对精度(至少 1 / 2precision)。

【讨论】:

  • 2^24
  • 舍入是所讨论术语的结果,即,例如,单精度浮点数不能将pi 保持在 30 位,IMO。你怎么称呼它?我投票赞成“精度损失”。
  • @CoffeeandCode:已编辑。现在它是有道理的。
猜你喜欢
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 2018-07-09
  • 1970-01-01
  • 2020-02-03
相关资源
最近更新 更多