C++中有关简单算术运算结果的精度问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 01:14:10
我把最重要的几个语句写在下边:
cout.setf(ios_base::fixed, ios_base::floatfield);
然后输入两个数分别cin到a和b
float a, b;
cout<<"a+b= "<<a+b;
例如输入的两个数为50.25和11.17
两个数相加应该是61.42,为什么出来的结果是61.419998而不是61.420000??
那为什么出现的是61.419998这个数呢?是随机的吗?只要能四舍五入成61.42都可能出现??

浮点数总有精度问题,在内存中计算最后都只是一个近似值,虽然误差很小;
你的计算结果取前几位就好了,最后不会影响结果;
两个浮点数比较也要考虑精度问题;例如 要比较双精度变量a和b是否相等
if (a == b) 永远不会成立;
正确的是 相减 小于某个极小的值如 1e-6
if (abs(a - b) < 1e-6)
这样才行

float类型的有效位数精度是6到7位;
是随机的,你可以多试几次;总之不要超出精度有效位数外,四舍五入没问题

换double