葛成功之路 2020-03-23 16:58 采纳率: 87.5%
浏览 475
已采纳

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

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

#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;
}
  • 写回答

3条回答 默认 最新

  • threenewbee 2020-03-23 17:12
    关注

    你的代码有个缺陷,就是当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 . . .

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件