floating-point - 有效数字与 float 精度损失之间的关系是什么?

标签 floating-point floating-point-precision

因此,我一直试图绕过浮点数中的有效位数与相对精度损失之间的关系,但是我似乎无法理解这一点。我之前读过一篇文章,说要执行以下操作:

  • 将浮点数设置为2147483647。您将看到它的值实际上是2147483648
  • 从浮点数减去64,您将看到该操作是正确的
  • 从浮点数减去65,您将看到实际上现在有2147483520,这意味着它实际上减去了128。

  • 那么,为什么有10位有效数字的情况下却是128位呢?我了解浮点数的存储方式(1位为符号,8位为指数,尾数为23位),并且如果您假设所有整数都将自动在float数据结构中找到精确的原点,那么您将失去精度。不了解128的来源。我的直觉告诉我,我处在正确的轨道上,但我希望有人能够为我解决这个问题。

    最初,我认为可能的浮点数之间的距离为2 ^(n-1),其中n是有效数字的数量,但这并不成立。

    谢谢!

    最佳答案

    两个相邻浮点数之间的“距离”为2 ^(1-n + e),其中e为真指数,n为尾数位数(AKA有效数字)。存储的指数不是真实的指数,它具有偏差。对于IEEE-754浮点数,该值为127(对于归一化的数字)。因此,正如彼得·奥(Peter O)所说,距离取决于指数。

    关于floating-point - 有效数字与 float 精度损失之间的关系是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7005850/

    相关文章:

    c - 将 double 转换为 float 后值不正确

    python - 无序复数浮点集的近似相等

    c++ - 分割 64 位值以适合 double 参数类型

    c++ - Gram-Schmidt 可能导致精度损失

    c - 如果是整数,则使用 sprintf 格式化没有小数位的 float

    c++ - 为什么我们不能从浮点最大值中减去?

    c++ - 长双字面量的 C++ 后缀是什么?

    python - Matlab 的交换误差

    根据 gmp 任意精度计算机器精度

    mysql - 在 MySQL 中使用浮点存储超过一百万的值的最大可能值