| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 918 人关注过本帖
标题:[求助]一个关于2.1/1.9和1.9/2.1的问题
取消只看楼主 加入收藏
neufcl
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-10-23
收藏
 问题点数:0 回复次数:5 
[求助]一个关于2.1/1.9和1.9/2.1的问题

今天遇到这样一个问题

#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
void main()
{
int i,n=0;
double x=1,y1=2.1/1.9,y2=1.9/2.1;
for(i=1;i<22;i++)
x=x*y1;
while(x!=1.0)
{
x*=y2;
n++;
}
cout<<n<<endl;
}
输出结果为21.
实验证明当将所有的double改成long double时,结果还是21
但是改成float时就会死循环。

我觉得是和机器内的浮点数的最多小数位数有关。但是不甚理解
请大侠们指点

搜索更多相关主题的帖子: double include 小数 机器 
2007-10-27 19:56
neufcl
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-10-23
收藏
得分:0 
高手、大侠们帮帮小弟呗!

学好C++
2007-10-27 20:47
neufcl
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-10-23
收藏
得分:0 
回复:(雨中飞燕)浮点数本来就不应该用==或者!=来判...

我们写程序时是应该避免这样
但是这样也是合法的啊
这里考的就是浮点数和1.0的关系


学好C++
2007-10-27 21:10
neufcl
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-10-23
收藏
得分:0 
回复:(雨中飞燕)合法那又如何?[img]http://bbs.bc...
避免自己没有权威。我可以声明:这是迅雷的笔试题

学好C++
2007-10-28 08:33
neufcl
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-10-23
收藏
得分:0 
回复:(永夜的极光)哦。2.1和1.9这两个数是故意选的...
好像不是这样的。按道理说如果给出的两个浮点数相除小数的精度比double或float低的话。
一定输出21.如果它被截断。应该是死循环

学好C++
2007-10-28 08:53
neufcl
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-10-23
收藏
得分:0 
回复:(永夜的极光)我认为是这样的两个小数无论如何...
你说的有道理但是我觉得不完全正确。
你试下每一步的输出。最后一个值可第一个。倒数第二个值和正数第二个值。依次类推。
它们每一组值都是正好相等的。和21没有任何关系!

学好C++
2007-10-28 12:32
快速回复:[求助]一个关于2.1/1.9和1.9/2.1的问题
数据加载中...
 
   



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

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