c++有效数字问题

#include <iostream.h>
#include <math.h>
int main(void)
{
float a,b,c;long double d;
a=0.111111111111111;
d=0.111111111111111;
cout<<a<<endl;
cout<<d<<endl;
//cout<<sqrt(0.3);
return 1;
}
结果为什么都是:0.111111
这里我想过了,可能是cout的<<重载运算符的操作数只能精确到float类型。
#include <iostream.h>
#include <math.h>
#include <stdio.h>
int main(void)
{
float a;long double d;
a=0.111111111111111;
d=0.111111111111111;
cout<<a<<endl;
cout<<d<<endl;
printf("%20.20f,%.20f\n",a,d);
//cout<<sqrt(0.3);
return 1;
}
看了这个代码就知道了。

第1个回答  2010-03-01
float和double这些数据类型在内存中的存储方式为:符号位+指数+尾数
而它们的精度是由尾数的位数来决定的。

float尾数为七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double尾数为16位,所以同理知,double的精度为15~16位。

所以:
float 有效数字:6-7位
double 有效数字:15-16位

有效数字就是这样了,至于结果为小数点后6位,这是与硬件平台有关的,不同的编译器,都有自己默认的输出位数
第2个回答  2010-02-28
float 格式只保留 7 位有效数字。
所以 cout 输出的时候也只输出 7 位有效数字。
第3个回答  2010-03-01
楼上说错了,float、double输出默认都是6位小数