Mercurial > octave
diff liboctave/lo-specfun.cc @ 5701:252b6754e545
[project @ 2006-03-21 18:15:42 by jwe]
author | jwe |
---|---|
date | Tue, 21 Mar 2006 18:15:46 +0000 |
parents | 67118c88cee7 |
children | ace8d8d26933 |
line wrap: on
line diff
--- a/liboctave/lo-specfun.cc Tue Mar 21 17:31:45 2006 +0000 +++ b/liboctave/lo-specfun.cc Tue Mar 21 18:15:46 2006 +0000 @@ -37,6 +37,7 @@ #include "lo-ieee.h" #include "lo-specfun.h" #include "mx-inlines.cc" +#include "lo-mappers.h" #ifndef M_PI #define M_PI 3.14159265358979323846 @@ -160,7 +161,13 @@ xgamma (double x) { double result; - F77_XFCN (xdgamma, XDGAMMA, (x, result)); + + if (xisnan (x)) + result = x; + else if ((x <= 0 && D_NINT (x) == x) || xisinf (x)) + result = octave_Inf; + else + F77_XFCN (xdgamma, XDGAMMA, (x, result)); return result; } @@ -170,9 +177,10 @@ double result; double sgngam; - if (x <= 0) - (*current_liboctave_error_handler) - ("xlgamma: argument must be nonnegative"); + if (xisnan (x)) + result = x; + else if (x <= 0 || xisinf (x)) + result = octave_Inf; else F77_XFCN (dlgams, DLGAMS, (x, result, sgngam));