Why fmax or fmin doesn't work more than 2 number of value?

 
try find a maximum value or minimum value of a particular math calculation where it required to find out maximum value out of 3 , but in case of 2 value it worked any suggestion would help me find out. Thank you in advance 
 

Here you go:



// Inline macro
#define inline_MathMax(value1, value2) ((value1 >= value2) ? value1 : value2)
#define inline_MathMin(value1, value2) ((value1 <= value2) ? value1 : value2)


// Function
template <typename T, typename U>
const T MathMax(const T value1, const U value2)
{ return((T)MathMax((double)value1, (double)value2)); }


// Function
template <typename T, typename U>
const T MathMin(const T value1, const U value2)
{ return((T)MathMin((double)value1, (double)value2)); }


const double MathMax(   const double value1, 
                        const double value2, 
                        const double value3 = NULL, 
                        const double value4 = NULL, 
                        const double value5 = NULL, 
                        const double value6 = NULL, 
                        const double value7 = NULL, 
                        const double value8 = NULL, 
                        const double value9 = NULL, 
                        const double value10 = NULL)
{ 
    double val_a = inline_MathMax(value1, value2);
    val_a = inline_MathMax(val_a, value3);
    val_a = inline_MathMax(val_a, value4);
    val_a = inline_MathMax(val_a, value5);
    val_a = inline_MathMax(val_a, value6);
    val_a = inline_MathMax(val_a, value7);
    val_a = inline_MathMax(val_a, value8);
    val_a = inline_MathMax(val_a, value9);
    val_a = inline_MathMax(val_a, value10);
    return(val_a); 
}

// Multi input function
const int MathMax(  const int value1, 
                    const int value2, 
                    const int value3 = NULL, 
                    const int value4 = NULL, 
                    const int value5 = NULL, 
                    const int value6 = NULL, 
                    const int value7 = NULL, 
                    const int value8 = NULL, 
                    const int value9 = NULL, 
                    const int value10 = NULL)
{ 
    int val_a = inline_MathMax(value1, value2);
    val_a = inline_MathMax(val_a, value3);
    val_a = inline_MathMax(val_a, value4);
    val_a = inline_MathMax(val_a, value5);
    val_a = inline_MathMax(val_a, value6);
    val_a = inline_MathMax(val_a, value7);
    val_a = inline_MathMax(val_a, value8);
    val_a = inline_MathMax(val_a, value9);
    val_a = inline_MathMax(val_a, value10);
    return(val_a); 
}



// Multi input function
const double MathMin(   const double value1, 
                        const double value2, 
                        const double value3 = DBL_MAX, 
                        const double value4 = DBL_MAX, 
                        const double value5 = DBL_MAX, 
                        const double value6 = DBL_MAX, 
                        const double value7 = DBL_MAX, 
                        const double value8 = DBL_MAX, 
                        const double value9 = DBL_MAX, 
                        const double value10 = DBL_MAX)
{ 
    double val_a = inline_MathMin(value1, value2);
    val_a = inline_MathMin(val_a, value3);
    val_a = inline_MathMin(val_a, value4);
    val_a = inline_MathMin(val_a, value5);
    val_a = inline_MathMin(val_a, value6);
    val_a = inline_MathMin(val_a, value7);
    val_a = inline_MathMin(val_a, value8);
    val_a = inline_MathMin(val_a, value9);
    val_a = inline_MathMin(val_a, value10);
    return(val_a); 
}

// Multi input function
const int MathMin(  const int value1, 
                    const int value2, 
                    const int value3 = INT_MAX, 
                    const int value4 = INT_MAX, 
                    const int value5 = INT_MAX, 
                    const int value6 = INT_MAX, 
                    const int value7 = INT_MAX, 
                    const int value8 = INT_MAX, 
                    const int value9 = INT_MAX, 
                    const int value10 = INT_MAX)
{ 
    int val_a = inline_MathMin(value1, value2);
    val_a = inline_MathMin(val_a, value3);
    val_a = inline_MathMin(val_a, value4);
    val_a = inline_MathMin(val_a, value5);
    val_a = inline_MathMin(val_a, value6);
    val_a = inline_MathMin(val_a, value7);
    val_a = inline_MathMin(val_a, value8);
    val_a = inline_MathMin(val_a, value9);
    val_a = inline_MathMin(val_a, value10);
    return(val_a); 
}

 
BTW, I just saw, there is an error in the code above for the Math max function.

The default input on the parameters from value3 to value 10 would need not to be NULL but DBL_MAX * -1.0 and INT_MAX * -1 respectively.

Maybe you want to correct that. Else you will have issues with negative numbers always returning NULL as results.

 
Dominik Egert #:

Here you go:


isn't it more simple?

a = fmax(b,fmax(c,fmax(d,e)));
 
OP asked for a function, at least that's what I understood.

The posted version is at least concerning speed just one function call and more easy to read when utilized.

I had the same issue and this is a snippet from my personal function library.

Of course you can do it as you like.