| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 413 人关注过本帖
标题:为什么这个代码输出结果是这样
只看楼主 加入收藏
msl12
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2015-2-6
结帖率:25%
收藏
 问题点数:0 回复次数:7 
为什么这个代码输出结果是这样
# include <stdio.h>

int main(void)
{
    double i;
    for (i=0; i!=10; i+=0.1)
        printf("%.1f\n", i);
   
    return 0;
}
搜索更多相关主题的帖子: include double return 
2015-04-12 23:16
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
是啥样????

DO IT YOURSELF !
2015-04-13 08:47
向洪林
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:重庆市奉节县
等 级:版主
威 望:9
帖 子:118
专家分:405
注 册:2015-3-10
收藏
得分:0 
回复 楼主 msl12
你这是要输出还多个i???

新手上路,望大家多多照顾,谢谢!
2015-04-13 11:11
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
你是想问i == 10.0 的时候为什么还在循环吗??

人有多懒,编程就有多难。
2015-04-13 11:18
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
好像永远不会等于10

能编个毛线衣吗?
2015-04-13 11:19
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
改成这样再看结果,发现i从来就没有等于过10
printf("%lf\n", i);

再改成这样,程序没问题了
for (i=0; i!=10; i+=0.25)
说明二进制不能很好的表示0.1,只表示了0.1的近似值
而0.25是可以用二进制表示的


其实就像十进制的0.3一样,。0.3到底是多少?0.31125151541516...................

人有多懒,编程就有多难。
2015-04-13 11:32
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
# include <stdio.h>

int main(void)
{
    double i;
    for (i=0; int(i)!=10; i+=0.1)                       //强制类型转换
        printf("%.1f\n", i);
   
    return 0;
}


//你定义的i的数据类型是double,而10确是整形,肯定等不了,需要你变换一下

既然还有不甘心
就还没到放弃的时候~
2015-04-13 11:43
AleTiff
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:64
专家分:157
注 册:2015-3-30
收藏
得分:0 


不是整形和双精度的问题,是计算机目前能达到的精度问题。

当代码写成 double i; i!=10; 的时候,第一遍扫描就已经自动把 10 转换为双精度 10.0f 了。问题是双精度表示,计算机目前精度只到达 64bit,也就意味着,根本没办法达到 10.0f 的无限双精度的精确度。因此,这个代码的判断永远不会满足。

这个例子看上去好像是某个教科书上的一个教案,目的是让同学们了解,浮点、双精度数做比较的时候,永远不要想当然地用等于和不等于去判别,另外,也暗示循环次数尽量不要使用浮点、双精度数,因为对计算机硬件有依赖,并且会导致意想不到的问题。
2015-04-13 12:02
快速回复:为什么这个代码输出结果是这样
数据加载中...
 
   



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

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