C 中的浮点精度
在 C 中,浮点数精确到一定的小数位数。然而,这种精度是有限制的,这可能会导致意外的结果。
问题陈述
考虑以下代码片段:
double a = 0.3;
std::cout.precision(20);
std::cout 如图所示,a 略小于 0.3,但乘以 50 时,b 会略大于 15.0。与预期结果的偏差可归因于浮点精度的限制。
解决方案
要获得正确的结果,避免设置精度高于数字类型的可用精度。以下修改后的代码片段演示了这种方法:
#include
#include
int main() {
double a = 0.3;
std::cout.precision(std::numeric_limits::digits10);
std::cout ::digits10);
std::cout 此方法可确保将精度设置为双精度数据类型可用的最大值。需要注意的是,如果循环运行明显更多的迭代次数(例如 5000 次而不是 50 次),则无论精度设置如何,累积误差最终都会变得明显。这是浮点运算的固有限制。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3