为了账号安全,请及时绑定邮箱和手机立即绑定

以下是是程序不对,还是由于精度根本比不出来?这是为什么呢?

以下是是程序不对,还是由于精度根本比不出来?这是为什么呢?

C PHP
MM们 2022-04-21 19:15:02
就是比较一个int变量和double变量的问题,我的程序如下:#include <iostream>using namespace std;int main( void ){int i_var1;double d_var2;cout<<"Please input two numbers( The 1st is int, the 2nd is double )"<<endl;cin>>i_var1>>d_var2;double d_var_temp = (double)i_var1;if ( ( d_var2 - d_var_temp ) == 0.0 ){cout<<"double number = int number"<<endl;}else if ( ( d_var2 - d_var_temp ) >= 1e-06 ){cout<<"double number > int number"<<endl;}else{cout<<"double number < int number"<<endl;}return 0;}测试了几组数据,发现i_var1 = 1,d_var2 = 1.000001的结果不对,应该是d_var2大,但输出是‘double number < int number’,是怎么回事啊?是程序不对,还是由于精度根本比不出来?
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

double是16位精度
把1e-06 改成 1e-15,扩大应用范围
另外对于浮点数不要用 == 来比较
判断a,b相等,用
if(fabs(a-b)<1e-15) printf("a==b");

查看完整回答
反对 回复 2022-04-24
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

问题在else if ( ( d_var2 - d_var_temp ) >= 1e-06 )
1.000001 输入后,跟踪一下,就知道是1.0000009999999999,
当然就是double number < int number
避免:

#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
#define MIN_EQ_THHOLD 1e-12
int main( void )
{
double c = 0;
c++;
int i_var1 = 0;
double d_var2 = 0;

cout<<"Please input two numbers( The 1st is int, the 2nd is double )"<<endl;

cin>>i_var1>>d_var2;

double d_var_temp = (double)i_var1;

if ( fabs( d_var2 - d_var_temp ) <= MIN_EQ_THHOLD)
{
cout<<"double number = int number"<<endl;
}
else if ( d_var2 > d_var_temp )
{
cout<<"double number > int number"<<endl;
}
else
{
cout<<"double number < int number"<<endl;
}

return 0;
}



查看完整回答
反对 回复 2022-04-24
  • 2 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号