c语言的第六位小数,C语言中,float类型怎么储存小数点后六位的,第六位会四舍五入么?...

你上面的2个结果写颠倒了吧? -- 这里面涉及到两个精度问题,即printf的指定精度,以及c的数据类似float和double的精度。printf("%f\n",x);

%f, 没有指定精度(位数),c缺省设定的是小说点后6位,因此截短(四舍五入了)printf("%.12lf\n",x);

这个指定了精度是小数点后面12位,因此输出12位;但之所和原来赋值时不同,是由于x的类型是float,而非double。 float的精度本身不如double。 这个话题由来已久,涉及到电脑中对小数的存储模式,简单而言,十进制的小数部分是按照1/2 + 1/4 + 1/8 + .... 这样的方式去逼近的。因此存在误差,也就是所谓的{存储精度}的问题。

float,32位对浮点数的表达是:0~22位=尾数;23~ 30是指数,31位则是符合位。

float x = 1.23456789 = 0x3F9E0652

double x = 1.23456789 = 0x3FF3C0CA4283DE1B

而y由于本身就是double (64位存储,尾数部分有52位表示,11位指数位和1个符号位构成),电脑的存储精度要高。

y=9.876543210000 =  0x4023C0CA4588F633

y=9.876543 = 0x412ABFFE00000000

因此如有可能,尽量用double。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值