从 C++ 中的函数返回双精度的问题

Problem returning double from a function in C++

本文关键字:双精度 问题 返回 函数 C++      更新时间:2023-10-16

我有一个函数,如下所示:

double foo(int a, int b)
{
double r=a+b;
return r/2.0;
}

当 a= 10000 和 b= 10001 时 它工作正常。返回 10000.5

但是当 a= 100000b= 100001 它返回 100000

我也用其他数字进行了测试。它仅在整数少于 6 位时有效。(在输出时不使用设定精度(

我也试过这个,但没有帮助。

double r= double(a+b);

谁能解释一下发生了什么?如果我在输出中使用设置精度,则没有问题。

但是,我无法控制何时以及如何打印输出,我必须提交此函数。我能做些什么吗?

默认情况下,C 双精度或长双精度在输出中使用 6 位精度。如果要写入 2000.007,它将给出输出 2000.01,四舍五入为 6 位。但是在内存中它将具有正确的值。因此,正确的方法是

double foo(int a, int b)
{
double r=a+b;
cout<<setprecision(4)<<fixed;
return r/2.0;
}

当您使用setprecision((固定时,输出将从该点开始格式化为所有输出,直到进行任何进一步的更改。 因此,如果您不想更改有关输出样式的任何内容,那么恐怕对此

无能为力。编辑:有时使用双精度似乎会导致意外输出。例如,如果您有类似

double c = 299792458;
double b = 299792450;
cout<<c<<" "<<b<<" "<<c-b;

它将输出

2.99792e+008 2.99792e+008 8

这再次四舍五入到 6 位数字,这正是它应该发生的方式。但是作为第三个输出,结果是正确的。