c语言程序,请问为什么我用float时会出现误差

如图,我把x,y定义成float时小数点后面总会出现误差,而定义成double时就不会出现误差,为什么?float不是有6位有效数字的准确性吗?

这个你得知道浮点型数据的存储格式;
我简单给你说下,具体不懂你再问我;
11.2的小数部分0.2转换为2进制则是无限循环的00110011001100110011...单精度在存储的时候用23bit来存放这个尾数部分(前面9比特存储指数和符号);同样0.6也是无限循环的;
而打印格式为%f的时候,数据会以8字节出栈!这个时候后32bit都是0,(正常来讲原数是一直循环的)所以打印出的结果就这样了;
而你定义成双精度,它本身就是8字节存储,(相比单精度存储,他后32bit是有数据的!)所以这个时候取出的8字节,四舍五入直接就是0.6!就好比你定义输出%.1f一样,也会打印出0.6,是一个道理!
不知你明白没。单精度双精度转换的时候,一般小数末位不是5的话,都会丢失数据的!原理就像上面说的一样。记得采纳哦亲!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-28
浮点数,你就别指望他给你算出你想要的值,它都讲究精确到小数点后几位的
第2个回答  2013-10-28
把输出改为printf("%.1f",y);
第3个回答  2013-10-28
不是对着呢么?
浮点型参与运算会有误差。
相似回答