gpt4 book ai didi

c++ - C中浮点运算错误

转载 作者:太空狗 更新时间:2023-10-29 20:44:37 24 4
gpt4 key购买 nike

请告诉我以下 C 函数之间的区别。

static int mandel(float c_re, float c_im, int count) {
float z_re = c_re, z_im = c_im;
int i;
for (i = 0; i < count; ++i) {
if (z_re * z_re + z_im * z_im > 4.f)
break;

float new_re = z_re*z_re - z_im*z_im;
float new_im = 2.f * z_re * z_im;
z_re = c_re + new_re;
z_im = c_im + new_im;
}

return i;
}

以及以下内容

static int mandel(float c_re, float c_im, int count) {
float z_re = c_re, z_im = c_im;
int i;
for (i = 0; i < count; ++i) {
if (z_re * z_re + z_im * z_im > 4.f)
break;

float new_im = 2.f * z_re * z_im;
z_re = c_re + z_re*z_re - z_im*z_im;//I have combined the statements here and removed float new_re
z_im = c_im + new_im;
}

return i;
}

请参阅我对代码更改的评论。该函数为某些输入提供了不同的值。由于结合了这两个语句, float 是否会出错?

最佳答案

在数学中,这两个陈述是等价的。但是在计算机硬件中它们可能不是。

您可能会遇到舍入错误,因为初始结果 (new_re) 已舍入,然后添加到 c_re。

正如 Niklas 提到的:

intermediate values are stored with higher precision

因此,当存储到 new_re 时,new_re 的结果可能会丢失一些 float ,但如果将中间值添加到 c_re,则 c_re 的小值与 new_re 计算的较低有效值相结合可能会影响最终结果。

关于c++ - C中浮点运算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12832863/

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