从 C++ 中的函数返回双精度问题
Problem returning double from a function in C++
我有这样的功能:
double foo(int a, int b)
{
double r=a+b;
return r/2.0;
}
当 a= 10000 和 b= 10001 时它工作正常。 Returns10000.5
但是当 a= 100000 b= 100001 它 returns 100000
我也用其他号码测试过。它仅在整数小于 6 位时有效。(输出时不使用 setprecision)
我也试过这个,但没有用。
double r= double(a+b);
谁能解释一下这是怎么回事?如果我在输出中使用 setprecision,就没有问题。
但是,我无法控制何时以及如何打印输出,我只能提交此功能。有什么我可以做的吗?
C double 或 long double 默认使用 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() 和 fixed 时,输出将从该点向前到所有输出格式化,直到进一步进行更改。
所以,如果您不想更改输出样式的任何内容,恐怕您对此无能为力。
编辑:有时使用双打似乎会导致意外输出。例如,如果你有类似
double c = 299792458;
double b = 299792450;
cout<<c<<" "<<b<<" "<<c-b;
它会输出
2.99792e+008 2.99792e+008 8
再次四舍五入为 6 位数字,这正是它应该如何发生的。但是作为第三个输出,结果是正确的。
我有这样的功能:
double foo(int a, int b)
{
double r=a+b;
return r/2.0;
}
当 a= 10000 和 b= 10001 时它工作正常。 Returns10000.5
但是当 a= 100000 b= 100001 它 returns 100000
我也用其他号码测试过。它仅在整数小于 6 位时有效。(输出时不使用 setprecision)
我也试过这个,但没有用。
double r= double(a+b);
谁能解释一下这是怎么回事?如果我在输出中使用 setprecision,就没有问题。
但是,我无法控制何时以及如何打印输出,我只能提交此功能。有什么我可以做的吗?
C double 或 long double 默认使用 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() 和 fixed 时,输出将从该点向前到所有输出格式化,直到进一步进行更改。 所以,如果您不想更改输出样式的任何内容,恐怕您对此无能为力。
编辑:有时使用双打似乎会导致意外输出。例如,如果你有类似
double c = 299792458;
double b = 299792450;
cout<<c<<" "<<b<<" "<<c-b;
它会输出
2.99792e+008 2.99792e+008 8
再次四舍五入为 6 位数字,这正是它应该如何发生的。但是作为第三个输出,结果是正确的。