我在看一本C语言的书时遇见了一个问题 3Q

问题描述:

我在看一本C语言的书时遇见了一个问题 3Q
是这么写的:许多C编译系统将实型常量作为双精度处理.例如已定义一个实型变量f,有如下语句:f=2.45678*4523.65
系统将2.45678和4523.65按双精度数据存储(占64位)和运算,得到的双精度的乘积,然后取前七位赋给实型变量f.这样可以保证计算更精确.
我不理解的是得到的乘积不是11113.612847吗 可是这个范围属于单精度啊 ,为什么一直用双精度,对于这类概念我很迷糊 ,感激不尽.解释越详细越容易明白越好
上面说 “然后取前七位赋给实型变量f,这样可以保证计算更精确”为什么这样就能计算更精确呢,还有他说的前七位是什么前七位 .我越看越糊涂了..你们看我的提问 能知道我哪个地方没学好哪里不明白吗 我自己都不知道我要问什么了~无奈 就是知道不理解!
1个回答 分类:综合 2014-11-09

问题解答:

我来补答
首先关于浮点数的精度,楼主及然知道float是32位,那么你是否知道浮点数在计算机中是怎么表示的?
是通过数符±\x05尾数m\x05阶符±\x05阶码e表示的,而这四个东西一共占有32位
你说的单精度的范围,是指其表示数的最大范围,而不是精度范围,比如1.xxx(小数点后100位)是不是也在float的范围内,但你看能表示的了么?
32位中尾数的位数决定了其精度,而阶码的位数决定了其范围
11113.612847这数字,我们可以算成2进制10101101101001.10010101100111101111,我的计算器不太好,可能不太准,但是你可以看出,其表示光尾数至少需要35位,很明显float表示不了
 
 
展开全文阅读
剩余:2000
上一页:周五
下一页:责任的事实论据
也许感兴趣的知识