从 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 时 它工作正常。返回 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 位数字,这正是它应该发生的方式。但是作为第三个输出,结果是正确的。
相关文章:
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 检查是否以特定精度给出双精度
- 高精度双精度的 Sprintf 格式化问题
- 从 C++ 中的函数返回双精度的问题
- C++,遇到将双精度转换为整数的问题
- 向量<对<双精度,双精度>>给出问题
- 二进制表达式的语义问题无效操作数("双精度"和"双精度")
- 着色器中实现双精度cos()的结果是NaN,但在CPU上运行良好.出了什么问题
- 如何将双精度数组从 VB6 传递到 VC++.这段代码有什么问题
- fmod 输出有问题(长双精度、长双精度)
- 更改为整数时的双精度值编程问题
- C++(双精度)0.700 * int(1000) => 699(不是双精度问题)
- 将双精度转换为字符串函数-内存问题
- 用cout显示双精度的c++问题
- PInvoke:返回双精度数组的问题
- 带有<T>浮点/双精度值的 std::numeric_limits::min() 的问题