如何防止 C++ 中的舍入错误
How to prevent rounding error in c++?
如何防止C++中的舍入错误或修复它?
例:
float SomeNumber = 999.9999;
cout << SomeNumber << endl;
它打印出 1000 个!
您可以通过设置精度来更改cout
完成的舍入。
cout.precision(7);
float SomeNumber = 999.9999;
cout << SomeNumber << endl;
或者,您可以使用 csdio 中的printf
。
默认情况下,格式化输出 via std::ostream
将浮点值舍入为六个有效的十进制数字。您需要 7 才能避免您的数字四舍五入到 1000:
cout << setprecision(7) << SomeNumber << endl;
^^^^^^^^^^^^^^^
另外,请注意,假设常用的 32 位 IEEE 表示形式,您接近float
精度的极限。如果您需要超过七个有效数字,则需要切换到 double
.例如,以下打印1000
,无论您指定多少精度:
float SomeNumber = 999.99999; // 8 significant figures
cout << setprecision(10) << SomeNumber << endl;
要防止输出四舍五入,请在 iomanip 中使用 setprecision。
float SomeNumber = 999.9999;
std::cout << SomeNumber << std::endl; //outputs 1000
std::cout << std::setprecision (7) << SomeNumber << std::endl; //outputs 999.9999
return 0;
不过,存储在 SomeNumber 中的实际值将始终为 999.9999,因此您无需担心值本身(除非您需要比 float 提供的精度更高的精度)。
如前所述,如果您只查找 cout 舍入修复,请使用 .precision 函数。如果您指的是浮点数无法表示每个可能的分数,请阅读以下内容:
使用浮点数无法避免此类舍入错误。您需要以不同的方式表示数据。例如,如果您想要 5 位精度,只需将其存储为代表最小单位数量的长整型。
即 5.23524 w/精度为 0.00001 可以用长整型(或 int,如果您的值范围适合)表示为523524。您知道单位是 0.00001,因此您可以轻松使其工作。
相关文章:
- C++将浮点指针值舍入为小数位数
- Boost::posix_time::ptime舍入到给定的分钟数
- 浮点定向舍入和优化
- 为什么输出精度没有正确舍入?
- 使用设置精度时如何阻止数字向上舍入?
- 如何在使用 MPFR 时在提升多精度中设置舍入模式
- OpenCV 细分一致的 Rect2f 到 Rect2i 舍入
- C++ 中的舍入函数
- 舍入 QDecDouble 值,精度最多为两个字符
- 将大 int 转换为浮点数,而不舍入 c++
- 舍入错误检测
- 根据浮点符号对浮点进行舍入的最简单方法是什么
- 在与C 双打中存储的大整数时,如何避免舍入/精确错误
- 如何防止 C++ 中的舍入错误
- C++Visual Studio学习版2012中的舍入错误
- C++建议中的舍入错误
- 使用整数除法减少舍入错误
- 如何修复此舍入错误
- 防止舍入错误
- 浮点-C++浮点舍入(错误?)