首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于单精度实数,双精度实数的几个小问题!(初级有关问题)

2012-03-07 
关于单精度实数,双精度实数的几个问题!!(初级问题)main(){floatx,yx111111.111,y222222.222printf( %

关于单精度实数,双精度实数的几个问题!!(初级问题)
main()
{
float   x,y;
x=111111.111,y=222222.222;
printf( "%f\n ",x+y);
printf( "%f   %f\n ",x,y);
}

计算机输出的结果为:
333333.328125
111111.109375   222222.218750

我以为结果会有2种:
第一种直接输出:
333333.333
111111.111   222222.222     (这种结果是我最开始想的,后来看书知道float的有效位只有7位,所以我又想到了下面的结果)
第二种float的有效位数只有前7位,那么我认为结果应该是:
333333.3
111111.1   222222.2   (如果那个 ". "不算一个位的话)

下面还有个double的类型,问题一样
main()
{
double   x,y;
x=1111111111111.111111111,y=2222222222222.222222222;
printf( "%f\n ",x+y);
printf( "%f   %f\n ",x,y);
}

计算机输出结果:
3333333333333.333010
1111111111111.111080   2222222222222.222170

就是和我以为的不一样,请大家指点!!

[解决办法]
因为无论float 7有效或 double 16有效,没限定小数点后面几位都是输出6个小数。
另外也不会4舍5入
[解决办法]
单精度类型的二进制位只有32位,这制约了它的精度范围,也就是说会进行截短,损失精度
double的问题同样是这样
[解决办法]
计算机保存数字不像人脑,你说3,就是3.
说2.5就是2.5.
将2.5转换为2进制数后,它的最小单位就是位了.
一个float一般是4个字节,32位.
有效位7位,小数点后默认6位,多的都给砍掉了.
当你再次输出时就不是那么多了.
[解决办法]
float 一般是6位小数了

热点排行