| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4137 人关注过本帖
标题:为什么int类型转float。【【【输入一个数字之后】】】。显示为0.000000 ?
只看楼主 加入收藏
dlfhcg
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2010-9-23
收藏
得分:0 
"单精度的有效数字是小数点后六位,双精度是十位"  貌似双精度的是15~16位吧。

有时睡觉是件好工作,黑白颠倒的大学生活倒省了不少饭钱,省钱就是赚钱。
2010-09-29 23:34
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1696
专家分:4295
注 册: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
快速回复:为什么int类型转float。【【【输入一个数字之后】】】。显示为0.00000 ...
数据加载中...
 
   



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

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