[gfortran,patch] Make MIN and MAX handle NaNs correctly (PR32048)

Tim Prince tprince@myrealbox.com
Sat Jul 28 18:26:00 GMT 2007


FX Coudert wrote:
> Attached patch makes MIN and MAX intrinsics return correct IEEE 
> results (and consistent results) when given one or more NaN as 
> arguments. It does so by changing the code generated from MAX(a,b) := 
> (b > a ? b : a) into MAX(a,b) := (b > a || isnan(a) ? b : a); handling 
> of multiple arguments is done similarly.
>
> The introduction of isnan() tests probably has a cost, but hey, we 
> want a correct result anyway, don't we? Thus, I added a note into the 
> code saying that when IEEE_ARITHMETIC is implemented, we might want to 
> make this codepath dependent on IEEE_ARITHMETIC being used (I don't 
> think we should do that, but we should certainly discuss the option).
>
Does this affect minval() and maxval() intrinsics?  Up to now, they 
performed as well as equivalent C code with icpc, better than g++, but 
not as well as ifort.  I suppose it removes the prospect of vectorizing 
code with min() and max(), unless that will be enabled with -ffast-math.



More information about the Fortran mailing list