好的,所以我知道您通常不应该比较两个浮点数是否相等。然而,在威廉·卡汉 (William Kahan) 的《浮点计算中对舍入的无意识评估有多无用?他显示了以下代码(我相信是伪代码):
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 转换为双精度以保持多类型表达式中涉及的值的精度?
b)这仍然算作比较两个浮点数是否相等?