标题:为什么int类型转float。【【【输入一个数字之后】】】。显示为0.000000 ?
只看楼主
dlfhcg
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2010-9-23
得分:0 
"单精度的有效数字是小数点后六位,双精度是十位"  貌似双精度的是15~16位吧。

有时睡觉是件好工作,黑白颠倒的大学生活倒省了不少饭钱,省钱就是赚钱。
2010-09-29 23:34
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:20 
要理解这个事儿,得知道俩问题
一个是printf函数遇到%f的时候,就会把后面传递的对应参数压栈后的值理解为double类型。
    你送过去的i按照平台不同,一般是32位或者16位,而printf要按照double,也就是64位来理解它,那么这时就会在栈底后面多占用一些位,而这些位的值我们假设都是0(否则也可以认为是随机值)。

第二是浮点数存储格式,双精度浮点数从高位开始是1位符号,11位阶码,52位尾数
    按照上面说的,64位里面的高32位(甚至48位)都是0,那就是说阶码部分都是0,都是0的阶码表示尾数要乘以2的-1023次方,这样一来,你的i充当的尾数部分无论是多少,乘以2的-1023次方以后都非常小了,你用%f输出的仅仅有小数点后面6位,当然都是0了。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-09-30 10:22
xuexibianc
Rank: 2
等 级:论坛游民
帖 子:35
专家分:34
注 册:2010-9-8
得分:0 
...
2010-09-30 10:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-321545-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.077832 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved