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));