一个奇怪的问题,高人指教!

lzr4304061988012 2008-04-05 11:58:50
我有个小程序:
#include "iostream.h"
void main()
{
float x,y;
x=10.0;
y=10.0-0.8*4;
for(int i=0;i<4;i++)
x-=0.8;
if(x==y)
cout<<"yes"<<endl;
cout<<x<<" "<<y;
}
输出结果是6.8,6.8;
我很奇怪,难道想X!=Y吗?为什么不执行输出YES这一步呢?
高人指教啊!
...全文
128 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
EricFengJia 2008-04-06
  • 打赏
  • 举报
回复
#include <iostream.h>


void main()
{
float x = 10.0;
float y = (float)(3.6 + (0.8 * 4)); // 6.8

for(int i = 0; i < 4 ; i ++)
{
x -= (float)0.8; // 6.8



}

if(x < y) // X 是小于 Y
cout << "yes" << endl;

else
cout << x << " " << y << endl;
}

我记得 浮点的好象不能判断相等的!
不知道说的对不对。
你把X Y 换成 整型的 就没有这个问题了。
刚使过!

若说的不对希望那位给指导一下。
谢谢!
lin_style 2008-04-06
  • 打赏
  • 举报
回复
double d,d1
if ( -0.0000001<(d-d1)<0.00000001 )
wangxipu 2008-04-06
  • 打赏
  • 举报
回复
一般最忌讳浮点数相等的比较了,建议设置个精度内允许它相等的假定
HelloDan 2008-04-06
  • 打赏
  • 举报
回复

#include<iostream>
#include<iomanip>

using namespace std;

int main()
{
float x,y;
x=10.0;
y=10.0-0.8*4;
for(int i=0;i <4;i++)
x-=0.8;
if(x==y)
cout <<"yes" <<endl;
printf("%.8f %.8f",x,y);

return 0;
}
//这个试一下。
HelloDan 2008-04-06
  • 打赏
  • 举报
回复
没看清就回答了。
在我的系统下得数是:
x=6.79999924
y=6.80000019
等不等呢?
HelloDan 2008-04-06
  • 打赏
  • 举报
回复
用double应该行的。
lin_style 2008-04-06
  • 打赏
  • 举报
回复
像这种精度的
10.0不一定是10.0,
可能是10.0000000000000023
所以。。不一定相等。。。
c_spark 2008-04-06
  • 打赏
  • 举报
回复
if(-0.0000001 <(x-y) || (x-y)< 0.0000001)怎么没有显示颜色??
难到是code中不让用???
c_spark 2008-04-06
  • 打赏
  • 举报
回复
浮点数属于对实数进行近似的估计,如无理数等在精度范围内进行四写五入...
#include "iostream.h" 
void main()
{
float x,y;
x=10.0;
y=10.0-0.8*4;
for(int i=0;i <4;i++)
x-=0.8;
if(-0.0000001 <(x-y) || (x-y)< 0.0000001)
cout <<"yes" <<endl;
cout <<x <<" " <<y;
}

lzr4304061988012 2008-04-06
  • 打赏
  • 举报
回复
谢谢!
hoomey 2008-04-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lin_style 的回复:]
double d,d1
if ( -0.0000001 <(d-d1) <0.00000001 )
[/Quote]
allenrazor 2008-04-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qq271991628 的回复:]
引用 6 楼 lin_style 的回复:
double d,d1 
if ( -0.0000001  <(d-d1)  <0.00000001 )

[/Quote]
qq271991628 2008-04-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lin_style 的回复:]
double d,d1
if ( -0.0000001 <(d-d1) <0.00000001 )
[/Quote]
f22fbi 2008-04-06
  • 打赏
  • 举报
回复
浮点不要用==
浮点不精确
星羽 2008-04-06
  • 打赏
  • 举报
回复
浮点本来就是不精确的
asusmaster 2008-04-06
  • 打赏
  • 举报
回复
你这个程序经过反复调试发现是浮点数精度问题导致不能得到yes的预期答案,设置一个误差范围就能解决你的问题,5楼和6楼给出了方案。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧