我正在阅读Every Computer Scientist Should Know About Floating Point。
ulp 的概念看起来非常简单。但是,在早期的例子中,作者提出了一个主张(在 Guard Digits 部分)
将计算值(0.02 x 10)与计算(10.1 - 9.93)的真实值(0.17)进行比较,错误 30ulps 。
根据本文前面提到的公式,错误应该是:
| 0.02 - 0.017 | * 100 = 0.3ulps ,这对我来说很有意义。
显然,我错过了一些非常重要的事情。答案 0 :(得分:1)
在说明减法时,Goldberg将结果显示为.02×10 1 。这保留了输入和减法中使用的指数。但是,它不是结果的标准化指数。
在示例中,精度 p 为3位数。因此,计算结果.02×10 1 可表示为2.00×10 -1 ,精确的数学结果为1.70×10 -1 < / SUP>。这两种表示的ULP均为.01×10 -1 ,计算结果与30 ULP的数学结果不同。
答案 1 :(得分:0)
有2位数并不意味着1 ulp是0.01。单位的重点是它与特定数字的精度相关。 0.02是2.00 * 10 ^ -2; 0.017是1.70 * 10 ^ -2;在1.70和2.00之间有30个步骤。 (由于这两个数字恰好具有相同的指数,我们不必决定哪一个“定义”ulp,但我们不将其定义为10.1或9.93。)