ruby-changes:3921
From: ko1@a...
Date: Sat, 9 Feb 2008 11:11:19 +0900 (JST)
Subject: [ruby-changes:3921] akr - Ruby:r15411 (trunk): * missing/xlgamma_r.c (lgamma_r): return HUGE_VAL for non-positive
akr 2008-02-09 11:10:57 +0900 (Sat, 09 Feb 2008) New Revision: 15411 Modified files: trunk/ChangeLog trunk/missing/lgamma_r.c Log: * missing/xlgamma_r.c (lgamma_r): return HUGE_VAL for non-positive integers. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/missing/lgamma_r.c?r1=15411&r2=15410&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15411&r2=15410&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 15410) +++ ChangeLog (revision 15411) @@ -1,3 +1,8 @@ +Sat Feb 9 11:09:26 2008 Tanaka Akira <akr@f...> + + * missing/xlgamma_r.c (lgamma_r): return HUGE_VAL for non-positive + integers. + Sat Feb 9 10:03:07 2008 Tanaka Akira <akr@f...> * string.c (rb_str_new4): copy encoding from orig, instead of shared Index: missing/lgamma_r.c =================================================================== --- missing/lgamma_r.c (revision 15410) +++ missing/lgamma_r.c (revision 15411) @@ -12,6 +12,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 LOG_PI 1.14472988584940017 /* $\log_e \pi$ */ @@ -47,13 +48,13 @@ double lgamma_r(double x, int *signp) { - if (x < 0) { + if (x <= 0) { double i, f, s; f = modf(-x, &i); - if (f == 0.0) { - static const double zero = 0.0; + if (f == 0.0) { /* pole error */ *signp = 1; - return 1.0/zero; + errno = ERANGE; + return HUGE_VAL; } *signp = (fmod(i, 2.0) != 0.0) ? 1 : -1; s = sin(PI * f); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/