gpt4 book ai didi

c++ - 以更固定的方式将 double 添加到 double?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:04 28 4
gpt4 key购买 nike

我在我的代码中使用 double 而不是 float 但不幸的是我遇到了下一个问题:当我尝试添加时:

1.000000000000020206059048177849 + 0.000000000000020206059048177849

我有这样的结果:

1.000000000000040400000000000000 

这避免了最后 14 个数字.. 我希望结果更准确。我知道这可能看起来很傻,但这对我来说真的很重要..任何人都可以帮忙吗?

这是一个简单的代码示例:

#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
double a=1.000000000000020206059048177849 + 0.000000000000020206059048177849;
cout<<fixed<<setprecision(30)<<a;
system("pause");
return 0;
}

最佳答案

更新:下面的答案假定表达式是在运行时计算的,即您没有添加编译时常量。这不一定是真的,您的编译器可能会在编译时计算表达式。它可能为此使用更高的精度。正如评论中所建议的,打印数字的方式可能是问题的根本原因。


如果您绝对需要更高的精度并且不能做出任何其他改变,那么您唯一的选择就是提高精度。 double 值提供大约 16 位十进制数字的精度。您有以下选择:

  • 使用通过在软件中实现浮点运算来提供更高精度的库。这很慢,但是您可以根据需要获得尽可能精确的信息,例如参见GMP,GNU 多精度库。

  • 另一种选择是使用 long double,它至少与 double 一样精确。在某些平台上,long double 甚至可能提供比 double 更高的精度,但通常情况下它不会。在您的典型桌面 PC 上,它可能是 80 位长(与 64 位相比),但这不一定是真的,取决于您的平台和编译器。它不是可移植的。

也许,您可以避免麻烦并稍微调整您的实现以避免浮点错误。你能重新排序操作吗?您的中间结果的格式为 1+x。有没有办法计算 x 而不是 1+x?当然,减去 1 不是一个选项,因为 x 的精度已经丢失。

关于c++ - 以更固定的方式将 double 添加到 double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24625082/

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