有效数字
在学习有效数字时没有搞清楚为什么在cout输出时不管哪个类型都是6位有效数字,今天终于搞清楚。
在《C++Prime》第30页中标注如下:
float 6位有效数字
double 10位有效数字
long double 10位有效数字
但是当写入代码如下时:
#include<iostream>
using namespace std;
int main(){
float s=1.12345678910111213141516;
double a=1.12345678910111213141516;
long double c=1.12345678910111213141516;
cout<<s<<endl;
cout<<a<<endl;
cout<<c<<endl;
}
输出结果为:
原因在cout输出时只能输出6位有效数字,下面看这段代码:
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
float s=1.12345678910111213141516;
double a=1.12345678910111213141516;
long double c=1.12345678910111213141516;
cout << setprecision(20)<< s << endl;
cout << setprecision(20)<< a << endl;
cout << setprecision(20)<< c << endl;
}
输出结果为:
可以看到最后的有效数字float超过6位,double与long double都超过了10位,所以c++prime上注明的有效数字位数实际上可以理解为最少的位数。