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

2024-11-22 10:24:29
推荐回答(4个)
回答1:

这个你得知道浮点型数据的存储格式;
我简单给你说下,具体不懂你再问我;
11.2的小数部分0.2转换为2进制则是无限循环的00110011001100110011...单精度在存储的时候用23bit来存放这个尾数部分(前面9比特存储指数和符号);同样0.6也是无限循环的;
而打印格式为%f的时候,数据会以8字节出栈!这个时候后32bit都是0,(正常来讲原数是一直循环的)所以打印出的结果就这样了;
而你定义成双精度,它本身就是8字节存储,(相比单精度存储,他后32bit是有数据的!)所以这个时候取出的8字节,四舍五入直接就是0.6!就好比你定义输出%.1f一样,也会打印出0.6,是一个道理!
不知你明白没。单精度双精度转换的时候,一般小数末位不是5的话,都会丢失数据的!原理就像上面说的一样。记得采纳哦亲!

回答2:

浮点数,你就别指望他给你算出你想要的值,它都讲究精确到小数点后几位的

回答3:

把输出改为printf("%.1f",y);

回答4:

不是对着呢么?
浮点型参与运算会有误差。