This is to go with the hypot() patch I posted the other day. As other code, such as found in adt/float.c and adt/numeric.c, simply assumes that isnan() exists, despite it being a C99 function, I have assumed the same.
The below code should be placed into a file called src/port/hypot.c. Unfortunately I do not know how to drive configure and all the other associated build magics. Could some kind soul please implemented that portion. (Or shove me in the right direction) #include <math.h> #include "c.h" #include "utils/builtins.h" /* * Find the hypotenuse. Firstly x and y are swapped, if required, to make * x the larger number. The traditional formulae of x^2+y^2 is rearranged * to bring x outside the sqrt. This allows computation of the hypotenuse * for much larger magnitudes than otherwise normally possible. * * sqrt( x^2 + y^2 ) = sqrt( x^2( 1 + y^2/x^2) ) * = x * sqrt( 1 + y^2/x^2 ) * = x * sqrt( 1 + y/x * y/x ) */ double hypot( double x, double y ) { double yx; if( isinf(x) || isinf(y) ) return get_float8_infinity(); if( isnan(x) || isnan(y) ) return get_float8_nan(); x = fabs(x); y = fabs(y); if (x < y) { double temp = x; x = y; y = temp; } if (x == 0.0) return 0.0; else { yx = y/x; return x*sqrt(1.0+yx*yx); } } -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers