读书人

【新人】C语言实型常量的赋值中的简单

发布时间: 2012-10-18 13:46:55 作者: rapoo

【新人求助】C语言实型常量的赋值中的简单问题!谢谢大家
#include <stdio.h>
void main()
{
float x;
double y;
printf("输入实型常量x,y\n");
scanf("%f%f",&x,&y);
printf("单精度显示数值:%f 双精度显示数值:%f\n",x,y);
while(1);
}
假如我输入33333333333333 33333333333333
大家他会显示:
单精度显示数值:333333317812224.000000 双精度显示数值:-92559609535237229000000000000000000000000000000000000000.0000000
就是好像给Y的值没赋进去
我的代码没错
我也试过不给X赋值,直接给Y赋值,结果也是同样的
谢谢各位高手了!

[解决办法]
double类型要用lf,改成这样scanf("%f%lf",&x,&y);
[解决办法]
#include <stdio.h>
void main()
{
float x;
double y;
printf("ÊäÈëʵÐͳ£Á¿x,y\n");
scanf("%f%lf",&x,&y);
printf("µ¥¾«¶ÈÏÔʾÊýÖµ:%f Ë«¾«¶ÈÏÔʾÊýÖµ:%lf\n",x,y);
while(1);
}


由于float和double范围不一样。
所以结果:
3333333450752.000000 33333333333333.000000

中float前7位是正确的。后面的几位超过范围了。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

读书人网 >C++

热点推荐