gpt4 book ai didi

c++ - 使用 float 和 double 的差异很大

转载 作者:太空狗 更新时间:2023-10-29 20:35:49 25 4
gpt4 key购买 nike

#include <iostream>

using namespace std;

int main() {
int steps=1000000000;
float s = 0;
for (int i=1;i<(steps+1);i++){
s += (i/2.0) ;
}
cout << s << endl;
}

s 声明为 float:9.0072e+15

s 声明为 double:2.5e+17(与在 Julia 中实现的结果相同)

我知道 doublefloat 有双倍精度,但 float 仍应处理最大 10^38 的数字。

我确实读过类似的主题,但结果不一样,但在那种情况下差异非常小,这里的差异是 25 倍。

我还补充说,使用 long double 会得到与 double 相同的结果。如果问题是精度,我会期望有一些不同的东西。

最佳答案

问题是精度不够:https://en.wikipedia.org/wiki/Floating_point

在 1 亿个数字之后,您要将 1e8 添加到 1e16(或至少该数量级的数字),但单精度数字仅精确到 7 位数字 - 因此它与将 0 添加到 1e16 相同;这就是为什么您的 float 结果要低得多。

在大多数情况下更喜欢 double over float。

关于c++ - 使用 float 和 double 的差异很大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40869923/

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