首页 > 关于C语言中浮点数保存的问题

关于C语言中浮点数保存的问题

浮点数使用IEEE754进行保存,0.31会有丢失我知道,但是如图所示,为什么第一个结果没有丢失。


0.31是double型, 而x是float型,精度不一样。


PS 浮点常量默认都是double类型存储

你试试以下区别

printf("%.10f\n", 0.31f);
printf("%.10f\n", 0.31);
printf("%.20f\n", 0.31);

哥们,我刚刚回答了你一个关于 整型的 你又问了一个关于 浮点型的。
你没发现这俩问题其实都是一个原因导致的吗?
另一个问题里的回答

============================
把我评论里的内容挪过来.

编译器默认会将代码里的浮点型存储成double,一个double 丢失精度不可能丢4个字节吧?
0.31000000 00000000 00000000 765432100.31000000 241234614都保留10位你自然看不出来了前一个也丢失精度了.


传参数都是以double传递,0.31直接转成double格式,x会float转double,转换过程中会发生变化。


按照IEEE的标准对于32位浮点数,尾数值为最小值1时的相对误差可取得最大值,为0.5×2^(-23)=2^(-24),尾数值为全1时(对应的尾数为2-2^(-23),约为2)的相对误差可取得最小值,约为2^(-25)。双精度的相对误差可以按照这个做个推论,再结合上面的解释一个精确的结论就出来了。


我刚没看清题,还没发现,,你第一句输出的是0.31....,后面它是帮你补零的
代码中出现的小数(具体的数)是浮点型常量,默认是double型的。如果后缀加F或者f,则存储为float型

【热门文章】
【热门文章】