问题1:
用float计算结果有问题
原因:
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字; double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
解决方案:
用double
问题2:输出保留6位小数
解决方案:
1:
printf("%.6lf\n", l);
2:
#include <iomanip>
cout<<fixed<<setprecision(6)<<l<<endl;