【问题标题】:matlab floating number accuracy 2^(-45)matlab浮点数精度2^(-45)
【发布时间】:2019-09-18 13:27:54
【问题描述】:

我有两对数字 (155.11 , 155.35)(154.95 , 155.19),它们的差值都是 0.24。在matlab中,如果我计算 (155.11 - 155.35) - (154.95 - 155.19),matlab会输出2.8422e-14,即2^(-45)。我知道这是浮点数表示的机器分辨率问题,但对细节很好奇,为什么是这个值? 45有什么特别之处?

【问题讨论】:

  • 它来自数据类型,即它是16位还是32位数字。 eps 是给定位长的最小可能精度。
  • class(155.11 - 155.35) 是双精度的,应该有更高的精度 52 而不是 45?
  • @BlueRineS, esp 是浮点相对精度。
  • @obchardon 相对 w.r.t.什么?
  • 所有浮点数都达不到,所以esp('single')1与下一个更大的单精度数的距离。所以在这种情况下,它是相对于1

标签: matlab floating-point binary rounding precision


【解决方案1】:

eps(155.11) 是 2.8422e-14。您输入的原始数字已经进行了四舍五入。

【讨论】:

  • 我明白了。它是关于 log2(eps) + log2(155.11)
  • 在这种特殊情况下(同一二进制中的操作数)所有减法运算都是精确的(唯一不精确的是转换十进制->二进制浮点)。
  • @ahala 这是log2(abs(eps)),或floor(log2(abs(155.11))) - 52 % 52=floating precision - 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2016-02-26
  • 2015-05-25
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多