投稿 资料上传 提问 搜索
您现在的位置是: 首页 > 问答 > 正文

请问为什么双精度数无法正确比较大小

使用的是重载函数,整数无问题,但是输入双精度数就会出现四个比较结果,且无一正确 

#include<iostream> 
#include<math.h>
using namespace std;
int max(int a,int b) {
if (a>=b)
return a;
else if (a<b)
return b;
}
int max(int a,int b,int c){
int d;{
if(a>=b)
d=a;
else if(a<b)
d=b;}
if(d>=c)
return d;
else if(d<c)
return c;
}
double max(double a,double b){
if (fabs(a-b)>=0.00001)
return a;
else if (fabs(a-b)<0.00001)
return b;
}
double max(double a,double b,double c){
double d;{
if(fabs(a-b)>=0.00001)
d=a;
else if(fabs(a-b)<0.00001)
d=b;}
if(fabs(d-c)>=0.00001)
return d;
else if(fabs(d-c)<0.00001)
return c;
}
int main(){
int m,n;
cin>>m>>n;
cout<<"the max is "<<max(m,n)<<endl;
int e,r,t;
cin>>e>>r>>t;
cout<<"the max is "<<max(e,r,t)<<endl;
double y,u;
cin>>y>>u;
cout<<"the max is "<<max(y,u)<<endl;
double i,o,p;
cin>>i>>o>>p;
cout<<"the max is "<<max(i,o,p)<<endl;
return 0;
}


 

问题回复
  1. 不羁岁月
    不羁岁月IT技术之家

    你的代码有个缺陷,就是当a==b的时候,d没有值
    if(a>b)
    ->
    if(a>=b)
    或者else里面不要写if了

    不过有更简单的写法

    #include <iostream>

    using namespace std;

    template <typename T, int size>
    T max(T a, ...)
    {
    T * p = &a;
    T max = a;
    for (int i = 0; i < size; i++)
    if (max < p[i]) max = p[i];
    return max;
    }

    int main()
    {
    cout << max<int, 3>(1,2,3) << endl;
    cout << max<double, 5>(1.2,2.7,1.3,5.9,4.4) << endl;
    return 0;
    }

    3
    5.9
    Press any key to continue . . .  

    回复