一个int和double型数据比较的问题,我哪里写错了?
来源:百度知道 编辑:UC知道 时间:2024/05/19 16:17:23
就是比较一个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’,是怎么回事啊?是程序不对,还是由于精度根本比不出来?
#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’,是怎么回事啊?是程序不对,还是由于精度根本比不出来?
精度的问题,将1e-6改为1e-7或者1e-8后重试。
double是16位精度
把1e-06 改成 1e-15,扩大应用范围
另外对于浮点数不要用 == 来比较
判断a,b相等,用
if(fabs(a-b)<1e-15) printf("a==b");
问题在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_var
java 异常中0做除数在int型数据和double型数据中的不同
long int 和long double数据分别占用多少存储空间
能否将一个int 型的数组,一个float型的数组和一个double型的数组放在同一个多维数组里面?
C# 从键盘输入数字(int ,double ,.....)到一个变量中
用C语言计算int,long,double,long double和 char占用的内存字节数
int float double char是什么意思
double型数据的强制转换问题
将一个long int型数据赋给一个int型变量,要进行数值位截取,由于数据范围的变化出现的数据错误有哪些?
double 和 long double
C语言里,什么是整形变量和复合变量?int和double的区别