| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 764 人关注过本帖
标题:好奇怪的问题
只看楼主 加入收藏
vic_space
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-5-24
收藏
 问题点数:0 回复次数:10 
好奇怪的问题

#include "iostream.h"
void main()
{
double m=123.458;
while(m!=double(long(m)))
m=m*10;
cout<<m<<endl;
}
====================================
#include "iostream.h"
void main()
{
double m=123.456; //数字不同而已哦...
while(m!=double(long(m)))
m=m*10;
cout<<m<<endl;
}
上边2个程序一个能执行有结果!~一个没结果~!
请问问题在哪呢?~!

搜索更多相关主题的帖子: double long include 
2006-10-05 20:22
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
我试的都没结果。g++。

2006-10-05 21:54
djx20040701
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-4-20
收藏
得分:0 

我也试了,前一个由用,后面一个没有结果,还请高手指点迷津

2006-10-05 22:00
vic_space
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-5-24
收藏
得分:0 

请高手指点哦......

2006-10-06 08:23
C_Student
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-9-13
收藏
得分:0 
首先说明我也是新手…

第二个程序执行跟本就是无限循环,当掉了…
数学我不会,但是DOS接口看了一下…
程序没有”结束”运行,要自己按Ctrl+C…强制中止..
也就是无限循环,此题”无解”….

如果是VC++6.0 建议用F11(单步执行debug),
m的值每运作一次就一直增加...
以二个比对来看,第二组永远都有“小数点”..
因此没有达到结束的条件,变成无限循环..

我写明白一点好了, m=123.456变成这样子
double类型的"小数"表示...

1.2345599999999998e+023
1.2345599999999998e+024
1.2345599999999998e+025
1.2345599999999998e+026
1.2345599999999998e+027
1.2345599999999998e+028
1.2345599999999998e+029

乘一次最后面的数字就是+001
前面永远都是double,跟!=double条件完全不符合..

照成功的例子来看,程序试图把小数点之后都归零..
但是某些数字代进去都是变成上面那样子.....
因此,没有结束的条件成立.....

[此贴子已经被作者于2006-10-6 9:52:28编辑过]

2006-10-06 08:39
C_Student
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-9-13
收藏
得分:0 
附带一提:
Debug工具很重要,可以一步一步分解程序,
可以发现过程是哪一个不是自己所要的...
尤其是循环类型,用小一点的数目带进去,
要是无限循环也容易找,debug对循环类型很好用哦...

当然其它也是很好用,无需等程序全部完成才用它,
小小的区块就可以分解来除错了.

也可以用它来学其它范例,看程序指令是怎么运作的.
2006-10-06 09:10
vic_space
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-5-24
收藏
得分:0 

哦~!?
只是数字不同而已,而且第一个程序可以得到结果哦~!
那有什么好办法判断一个数是不是小数啊?~!

2006-10-06 09:51
C_Student
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-9-13
收藏
得分:0 
怎么改呢??基于我也是新手,对此题无法修改…
原因是大概知道了,但是没学到什么语法来用在这…
我差不多也是刚接触for这类指令而己…抱歉了@@

说真的,乘以10照理(人脑运算)来讲没小数才对,
不知怎么MS-VC++ 6变出小数来,
造成后来越乘越大,无限大到无解….

[此贴子已经被作者于2006-10-6 10:09:50编辑过]

2006-10-06 10:06
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
浮点数的等于 不等于的比较没有意义,有兴趣可以找找浮点数结构的介绍看看

2006-10-06 10:36
C_Student
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-9-13
收藏
得分:0 
嗯...是啊..这句一定有问题,
while(m!=double (long(m)))
不同类型的转换变成会多出小数...
我直接连乘3次10答案是正确的...

还是用比较简单的方式来处理,
若要变成整数,首先要取得小数位数有几个,
再来乘几次10就好了,当然可以在某些运算中提供,
或使用者输入,或其它方法详细给予相关信息...
避免使用double和long之间频繁切换...
兼容性不好的语法就少去强制使用了.

以上,个人的一些小小想法...

2006-10-06 10:50
快速回复:好奇怪的问题
数据加载中...
 
   



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

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