【发布时间】:2012-01-16 11:56:19
【问题描述】:
假设我有两个浮点数,x 和 y,它们的值非常接近。
在计算机上可以表示离散数量的浮点数,因此我们可以按升序枚举它们:f_1, f_2, f_3, ...。我希望在此列表中找到 x 和 y 的距离(即它们是 1、2、3、... 还是 n 离散步长?)
是否可以仅使用算术运算 (+-*/) 而不查看二进制表示来做到这一点?我主要对它在 x86 上的工作方式感兴趣。
假设y > x 和x 和y 仅相隔几步(例如,
(y-x) / x / eps
这里eps 表示机器ε。 (机器 epsilon 是 1.0 和下一个最小浮点数的差。)
【问题讨论】:
-
@ShreevatsaR,这就是为什么我也除以
x(不仅是eps)。(y-x) / x / eps = (y-x) / (x*eps)。不过我仍然不确定它是否正确。 -
啊,好的,抱歉。您的公式可能是正确的;让我们想想。 :-) 同时你可以阅读What Every Computer Scientist Should Know About Floating Point Arithmetic。
标签: floating-point numerical x87