gpt4 book ai didi

c++ - 将 double 与整数进行身份比较时,什么会转换为什么?

转载 作者:搜寻专家 更新时间:2023-10-31 01:21:27 25 4
gpt4 key购买 nike

好的,所以我知道您通常不应该比较两个 float 是否相等。然而,在 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 视为 double ,那么在比较 (T == 1) 或 (T == 0) 时会将 0 和 1 转换为 double 以保持多精度数中涉及的值的精度-型表达?

b) 这仍然算作比较两个 float 是否相等吗?

最佳答案

是的,是的。

对于 32 位整数,double 可以精确表示每个值。但是,当您将 double 与 64 位 int 进行比较时,如果 int 大于 2^52,则可能会出现舍入错误。不过,您可以使用 long double,它至少有 64 位尾数。

当然,最好的方法就是只使用浮点文字:1.0 或只是 1. 的类型为 double1.0f 是一个 floatmy_float_type(1) 具有它应该的任何类型 :v)。

关于c++ - 将 double 与整数进行身份比较时,什么会转换为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3792906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com