【发布时间】:2011-04-17 02:43:48
【问题描述】:
好的,所以我知道您通常不应该比较两个浮点数是否相等。但是,在 William Kahan 的 How Futile are Mindless Assessments of Roundoff in Floating-Point Computation? 中,他显示了以下代码(我相信是伪代码):
Real Function T(Real z) :
T := exp(z) ; ... rounded, of course.
If (T = 1) Return( T ) ; ... when |z| is very tiny.
If (T = 0) Return( T := –1/z ) ; ... when exp(z) underflows.
Return( T := ( T – 1 )/log(T) ) ; ... in all other cases.
End T .
现在,我有兴趣在 C 或 C++ 中实现它,我有两个相关的问题:
a) 如果我将 T 设为双精度,那么在比较中 (T == 1) 或 (T == 0) 将 0 和 1 转换为双精度,以保持多参数中涉及的值的精度-type 表达式?
b) 这仍然算作比较两个浮点数是否相等吗?
【问题讨论】: