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

ruby-changes:3930

From: ko1@a...
Date: Sat, 9 Feb 2008 23:46:05 +0900 (JST)
Subject: [ruby-changes:3930] akr - Ruby:r15420 (trunk): * missing/tgamma.c (tgamma): use lgamma_r if available.

akr	2008-02-09 23:45:43 +0900 (Sat, 09 Feb 2008)

  New Revision: 15420

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

  Log:
    * missing/tgamma.c (tgamma): use lgamma_r if available.


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

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15419)
+++ ChangeLog	(revision 15420)
@@ -1,3 +1,7 @@
+Sat Feb  9 23:44:29 2008  Tanaka Akira  <akr@f...>
+
+	* missing/tgamma.c (tgamma): use lgamma_r if available.
+
 Sat Feb  9 23:22:52 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* ext/bigdecimal/extconf.rb: simplified the condition.
Index: missing/tgamma.c
===================================================================
--- missing/tgamma.c	(revision 15419)
+++ missing/tgamma.c	(revision 15420)
@@ -11,6 +11,35 @@
 ***********************************************************/
 #include <math.h>
 #include <errno.h>
+#include "ruby/config.h"
+
+#ifdef HAVE_LGAMMA_R
+
+double tgamma(double x)
+{
+    int sign;
+    double d;
+    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;
+        }
+    }
+    d = lgamma_r(x, &sign);
+    return sign * exp(d);
+}
+
+#else
+
+#include <errno.h>
 #define PI      3.14159265358979324  /* $\pi$ */
 #define LOG_2PI 1.83787706640934548  /* $\log 2\pi$ */
 #define N       8
@@ -61,4 +90,4 @@
     }
     return exp(loggamma(x));
 }
-
+#endif

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

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