[前][次][番号順一覧][スレッド一覧]

ruby-changes:3924

From: ko1@a...
Date: Sat, 9 Feb 2008 12:07:49 +0900 (JST)
Subject: [ruby-changes:3924] akr - Ruby:r15414 (trunk): * missing/tgamma.c (tgamma): add error check.

akr	2008-02-09 12:07:34 +0900 (Sat, 09 Feb 2008)

  New Revision: 15414

  Modified files:
    trunk/ChangeLog
    trunk/missing/tgamma.c

  Log:
    * missing/tgamma.c (tgamma): add error check.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15414&r2=15413&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/missing/tgamma.c?r1=15414&r2=15413&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15413)
+++ ChangeLog	(revision 15414)
@@ -1,3 +1,7 @@
+Sat Feb  9 12:06:45 2008  Tanaka Akira  <akr@f...>
+
+	* missing/tgamma.c (tgamma): add error check.
+
 Sat Feb  9 11:47:03 2008  Tanaka Akira  <akr@f...>
 
 	* math.c (math_gamma): add error check.
Index: missing/tgamma.c
===================================================================
--- missing/tgamma.c	(revision 15413)
+++ missing/tgamma.c	(revision 15414)
@@ -10,6 +10,7 @@
     gamma.c -- Gamma function
 ***********************************************************/
 #include <math.h>
+#include <errno.h>
 #define PI      3.14159265358979324  /* $\pi$ */
 #define LOG_2PI 1.83787706640934548  /* $\log 2\pi$ */
 #define N       8
@@ -42,8 +43,22 @@
 
 double tgamma(double x)  /* Gamma function */
 {
-    if (x < 0)
-        return PI / (sin(PI * x) * exp(loggamma(1 - x)));
+    if (x == 0.0) { /* Pole Error */
+        errno = ERANGE;
+        return 1/x < 0 ? -HUGE_VAL : HUGE_VAL;
+    }
+    if (x < 0) {
+        int sign;
+        static double zero = 0.0;
+        double i, f;
+        f = modf(-x, &i);
+        if (f == 0.0) { /* Domain Error */
+            errno = EDOM;
+            return zero/zero;
+        }
+        sign = (fmod(i, 2.0) != 0.0) ? 1 : -1;
+        return sign * PI / (sin(PI * f) * exp(loggamma(1 - x)));
+    }
     return exp(loggamma(x));
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]