C语言float类型储存和printf输出问题

int main()
{
float x;
x = 1.23456789000 ;
printf("x = %.12lf\n", x) ;
return 0 ;
}
输出 x = 1.2345678800630
我知道会有错误的输出, 因为float只能储存到6位小数。 那么后面的8800630是怎么来的,若是随机数, 那么怎么每次都是8800630,教材上也是8800630,看起来不像是随机的,到像是有它的内在的原因

原因就是,你使用了lf输出,其实是将float x转换为一个double输出了。
相当于 double y = x;,然后输出y,这样后面的数值其实是因为一个4位浮点数给8位浮点数赋值的时候,将x的真实存储以double的精度显示出来了。
具体的说,这涉及float的二进制保存方式,如果你有兴趣,可以看看基础语法书上关于float的讲解,这里没法画图,不好解释,其实就是一个指数为8的位移码,因为实际不是以10进制存储,所谓10进制精度只是保障精度,实际的存储,是一个2^127
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-28
肯定不是随机的。溢出先要转化成二进制然后取位。
第2个回答  2013-09-28
查下浮点数在内存在是怎么存的。IEEE 74标准

C语言float类型储存和printf输出问题
原因就是,你使用了lf输出,其实是将float x转换为一个double输出了。相当于 double y = x;,然后输出y,这样后面的数值其实是因为一个4位浮点数给8位浮点数赋值的时候,将x的真实存储以double的精度显示出来了。具体的说,这涉及float的二进制保存方式,如果你有兴趣,可以看看基础语法书上关于float...

C语言里面float数据用printf(“%d”)输出的问题
C语言里面float数据用printf(“%d”)输出是0,是float数据使用错误造成的,解决方法如下:1、首先在电脑中打开C-Free 5编译器(界面) -> 文件 -> 新建(Ctrl+N)。2、然后输入下图所示代码。3、编译成功后的截图。如果编译失败,请检查语法或者编译器是否有问题。4、程序运行截图(开始和结束)。...

c语言 输入浮点型数据 和输出的有一点差别 为什么
也就是 以小数输出 但是%f 隐含了 输出6位小数 所以你输入的一大串 在6位小数后都被程序截取了

c语言printf输出float数据的问题
printf输出实型数据的时候,%f默认输出,实型数据的小数位数是6位 x是用于,以十六进制形式,输出整数 而这里,num是实数,所以类型不匹配,输出0

C语言中,float类型怎么储存小数点后六位的,第六位会四舍五入么?_百度...
printf("%.12lf\\n",x);这个指定了精度是小数点后面12位,因此输出12位;但之所和原来赋值时不同,是由于x的类型是float,而非double。 float的精度本身不如double。 这个话题由来已久,涉及到电脑中对小数的存储模式,简单而言,十进制的小数部分是按照1\/2 + 1\/4 + 1\/8 + ... 这样的方式...

c语言float类型输出
可以改成printf("%.1f\\n",sum);结果见下图:

请教C语言浮点数输出问题。
这也就解释了为什么浮点型减法出现了"减不尽"的精度丢失问题。 2、 float型在内存中的存储 众所周知、 Java 的float型在内存中占4个字节。float的32个二进制位结构如下 float内存存储结构 4bytes 31 30 29---23 22---0 表示 实数符号位 指数符号位 指数位 有效数位 其中符号位1表示正,0表示负。有效...

c语言中用float x=1234567.1234 然后printf("%f",x) 为什么输出的
一个float型数据占据4字节即32位内存,分别:第1位是符号位,2~9位是指数位,10~32位是尾数 1位 符号位f 即0为正,1为负 8位 指数位e 127为零,加1即尾数乘2,反之除2 23位 尾数n 共有24位,前面默认有1,即1.n 了解了结构再来讨论精度:精度取决于尾数,既有效位数,我们知道2^10...

关于c语言中float的问题
编译器给float分配了4个字节的内存,即32位,有23位尾数,8位指数位,1位符号位 所以float无论小数点在哪里,只能精确的存11115389这几位数,如果是 1.1115389,则可精确到小数点后7位 如果要更高的精度,可以用double 有兴趣的话,可以百度一下float与double的范围和精度 ...

c语言中关于float类型的问题
记不太清楚啦。好像意思是说浮点可以精确7个有效数字。而且小位数默认为6位小数。你整数部分肯定不会出错的。但是只有7个有效数字。所以后面的其他小数点会出错。各个电脑出错的值会有点不太相同。

相似回答