| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 823 人关注过本帖
标题:[娱乐] 浮点数那点事
只看楼主 加入收藏
zbqf109
Rank: 1
等 级:新手上路
帖 子:289
专家分:0
注 册:2006-12-31
收藏
 问题点数:0 回复次数:3 
[娱乐] 浮点数那点事
我们首先看一个程序:
程序代码:
#include <stdio.h> 
int main(int argc, char *argv[])
{
    float a, b, d;
    double c;
    a = 123.45;
    b = 123.5625;
    c = 123.45;
    d = 123.7;
    printf("a = %f, b = %f, c = %f, d = %f\n", a, b, c, d);
    return 0;
}

猜想一下,程序运行之后会输出什么?
我们都知道float是单精度,double是双精度,都保留了小数点后6位数字。所以,有些朋友会想当然认为输出是:
a = 123.450000, b = 123.562500, c = 123.450000, d = 123.700000
猜想是否正确?我们大家不妨验证一下。然后想想这是为什么。
搜索更多相关主题的帖子: 点数 float double int 单精度 
2008-03-12 12:48
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
除了B...其他三个的值全变了...
(B能不能完全表示成二进制忘了.懒得试验)

我觉得是这样

[[it] 本帖最后由 peach5460 于 2008-3-12 13:17 编辑 [/it]]

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2008-03-12 13:16
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
float最高只能8位有效数字
double是15位还是多少,忘记了

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-03-12 13:36
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
我的意思是...因为有些数的小数部分不能完全化成二进制(我不知道怎么表达,熟悉二进制和十进制换算的应该知道我在说什么)

而Float是IEEE32.24规范...Double是64.53规范...
存储的时候肯定会有误差...

转换类型来输出的时候,肯定会因为截断,放大这种误差...造成输出和赋的值不一样...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2008-03-12 14:09
快速回复:[娱乐] 浮点数那点事
数据加载中...
 
   



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

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