C++默认流的输出有效位是6位,简单来说如果你有一个double a=1.23456789;
使用cout<<a<<endl;进行输出的时候就会只输出小数点后六位,并对小数点之后的第七位进行4舍五入的操作。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
using namespace std;
int main()
{
double a = 0.10000041;
double b = 0.1;
if (a == b)
cout << a << " " << b << " YES" << endl;
else
cout << a << " " << b << " NO" << endl;
a = 1.123456789;
cout << a << endl;
printf("%f", a);
return 0;
}
比较容易导致的后果就是在编写简单程序时,如果不使用调试器监视变量,而采用输出中间值的方法,很容易因为输出的精度不够而获得错误的信息。
比如说以上的程序你可能会以为a=1,b=1两者相等,从而得出错误的分析结果。