如何防止 C++ 中的舍入错误

How to prevent rounding error in c++?

本文关键字:舍入 错误 何防止 C++      更新时间:2023-10-16

如何防止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,因此您可以轻松使其工作。