对于 IEEE float ,为什么它们等于 epsilon m?
(1 - 1e-16) - 1 ans = -1.1102e-16
1 + (1e-16 - 1) ans = 1.1102e-16
而另一方面,低于等于 0
(1 + 1e-16) - 1 ans = 0
谁能告诉我为什么?对于最后一个,我明白了 fl(x) = 1 对于 1 ≤ x ≤ 1 + M 和 fl(x) = 1 + 2 M 对于 1 + M < x ≤ 1 + 2 M
前两个不应该等于 0 因为 fl(x) = 1 对于 1 - M < x ≤ 1 和 fl(x) = 1 - 2 M 对于 1 - 2M ≤ x ≤ 1 - M ?
最佳答案
Machine epsilon并不是一个真正定义明确的术语,因为不同的来源和语言以不同的方式定义它。
如果我们取 M 为 2-53 ≈ 1.11 × 10-16(即 1 与前一个 float 之间的差距数,或 1 和下一个 float 之间的差距的一半)然后 1 附近的 float 线看起来像:
--|----|----|----|---------|---------|------
1-2M 1-M 1 1+2M 1+4M
所以,在标准的最接近的舍入,偶数的关系下,我们有
- fl(x) = 1-M 对于 1 - 3M/2 < x < 1 - M/2
- fl(x) = 1 对于 1 - M/2 ≤ x ≤ 1 + M
- fl(x) = 1+2M 对于 1 + M < x < 1 + 3M
所以在第一种情况下,1 - 1e-16
将四舍五入为 1 - M,而在第二种情况下 1 + 1e-16
将四舍五入为 1
关于floating-point - IEEE float 舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37561378/