代码之家  ›  专栏  ›  技术社区  ›  Kay

末位单位定义

  •  5
  • Kay  · 技术社区  · 6 年前

    我在读什么 Every Computer Scientist Should Know About Floating Point

    的概念 ulp公司 s看起来很简单。然而,在早期的一个例子中,作者提出了一个主张(在第 保护位 )

    在比较计算值时: (0.02 x 10) 到真实值 (0.17) 计算的 (10.1-9.93) ,错误为 30ulps

    根据本文前面给出的公式,误差应为:

    |0.02-0.017 |*100 = 0.3ulps ,这对我来说很有意义。

    很明显,我错过了一些非常重要的东西。

    2 回复  |  直到 6 年前
        1
  •  5
  •   Eric Postpischil    6 年前

    在演示减法时,Goldberg将结果显示为0.02 10 1. 。这将保留输入和减法中使用的指数。但是,它不是结果的归一化指数。

    在本例中,精度 P 是3位数。因此,计算结果。02 10 1. 可以表示为2.00×10 1. ,精确的数学结果为1.70 10 第1页 .这两种表述的ULP均为0.01 10 1. ,计算结果与数学结果相差30 ULP。

        2
  •  4
  •   Student Sneftel    5 年前

    有2个数字并不意味着1个ulp是0.01。这个单位的关键在于它是相对于一个特定数字的精度而言的。0.02 is 2.00*10 -2 ;0.017 is 1.70*10 -2 ;在1.70和2.00之间有30个步骤

    Err = | 2.00 - 1.70 | (10²)
        = 30 ulps
    

    (由于这两个结果恰好具有相同的指数,因此我们可以轻松确定哪一个“定义”ulp,但我们 按10.1或9.93定义。)