我在看一本C语言的书时遇见了一个问题 帮忙解释一下 3Q

是这么写的:许多C编译系统将实型常量作为双精度处理。例如已定义一个实型变量f,有如下语句:f=2.45678*4523.65系统将2.45678和4523.65按双精度数... 是这么写的: 许多C编译系统将实型常量作为双精度处理。例如已定义一个实型变量f,有如下语句: f=2.45678*4523.65
系统将2.45678和4523.65按双精度数据存储(占64位)和运算,得到的双精度的乘积,然后取前七位赋给实型变量f。这样可以保证计算更精确。
*************************************************
我不理解的是得到的乘积不是11113.612847吗 可是这个范围属于单精度啊 ,为什么一直用双精度,对于这类概念我很迷糊 ,哪位高手能给我指点指点 感激不尽。解释越详细越容易明白越好 谢谢
想在麻烦解释一下 上面说 “然后取前七位赋给实型变量f,这样可以保证计算更精确”为什么这样就能计算更精确呢,还有他说的前七位是什么前七位 。。 我越看越糊涂了.. 你们看我的提问 能知道我哪个地方没学好哪里不明白吗 我自己都不知道我要问什么了~ 无奈 就是知道不理解!
展开
 我来答
poorcowboy
2012-01-31 · TA获得超过4291个赞
知道答主
回答量:281
采纳率:0%
帮助的人:169万
展开全部
首先关于浮点数的精度,楼主及然知道float是32位,那么你是否知道浮点数在计算机中是怎么表示的?
参考这里:http://baike.baidu.com/view/339796.html?wtp=tt

是通过数符± 尾数m 阶符± 阶码e表示的,而这四个东西一共占有32位
你说的单精度的范围,是指其表示数的最大范围,而不是精度范围,比如1.xxx(小数点后100位)是不是也在float的范围内,但你看能表示的了么?

32位中尾数的位数决定了其精度,而阶码的位数决定了其范围

11113.612847这数字,我们可以算成2进制10101101101001.10010101100111101111,我的计算器不太好,可能不太准,但是你可以看出,其表示光尾数至少需要35位,很明显float表示不了
wang06998
2012-01-31 · TA获得超过5659个赞
知道大有可为答主
回答量:3755
采纳率:83%
帮助的人:2486万
展开全部
双精度,实际上是将实数保留15或16个有效数字后存储
单精度,只是将实数保留7到8个有效数字存储

vc规定,所有实数都是按照double来使用,同时都是按照指数形式才存储

例如:
float a=1.0;
实际上是吧double型的1.0(16个有效数字,自己加0去),去掉后面的精度,只保留7或8个有效数字写入变量a

同样的,
float a=1.0;
double b=a;
是吧float型的a中存储的实数1.0取出,扩充至16个有效数字,然后写入变量b

总而言之,个人感觉,这两种类型,除了字节数不同,精确程度不同外,用起来的话几乎没有什么影响
追问
在请问一下 1.0还分float型跟double型吗? 这样的分有何意义 0属于有效数字吗?你说的去掉后面的精度 我还是不太理解呢
追答
1.0就是1.0,你说他是1.000000也好,说他是1.000000000000000000000也好,总之他是不会变的。

但是在c中,1.0是实型常量,按照c的规则是按照double来使用的。

所谓有效数字,就是我觉得1.0不够精确,人为在后面追加几个0罢了。
或者是3.14159265太长了,不好用,按照3.14来使用。

至于你一开始问的那个,我这么问,保留16个有效数字的1.000000000000000,你会写这么多0吗?还不是一个1.0搞定。习惯问题罢了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_Tomoyo
2012-01-31 · TA获得超过148个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:188万
展开全部
double * double=float?
更多追问追答
追问
f=2.45678*4523.65
这个不是是两个float相乘吗
追答
字面值常量编译器认为是double,如果想定义为float,那么f=2.45678f*4523.65f
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幸运萧墙
2012-01-31
知道答主
回答量:16
采纳率:0%
帮助的人:10.6万
展开全部
单精度float精确到6位,双精度double15位,不过c中大多情况是隐式转换把float型转化为double型来计算我不知道你是怎么判断11113.612847是单精度的。
更多追问追答
追问
里面说 单精度(float型)32位 有效数6~7 数值范围10^-37~10^38   不是说 数值范围是         10^-37~10^38吗  11113.612847 不是在10^-37~10^38的范围之内吗 为什么说是双精度呢
追答
我觉得这个范围是IEEE的精确范围,可又不像。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式