12#include "ruby/internal/config.h" 
   13#include "ruby/missing.h" 
   20#define PI      3.14159265358979324   
   21#define LOG_2PI 1.83787706640934548   
   25#define B1  (-1.0 / 2.0) 
   26#define B2  ( 1.0 / 6.0) 
   27#define B4  (-1.0 / 30.0) 
   28#define B6  ( 1.0 / 42.0) 
   29#define B8  (-1.0 / 30.0) 
   30#define B10 ( 5.0 / 66.0) 
   31#define B12 (-691.0 / 2730.0) 
   32#define B14 ( 7.0 / 6.0) 
   33#define B16 (-3617.0 / 510.0) 
   41    while (x < N) {  v *= x;  x++;  }
 
   43    return ((((((((B16 / (16 * 15))  * w + (B14 / (14 * 13))) * w
 
   44                + (B12 / (12 * 11))) * w + (B10 / (10 *  9))) * w
 
   45                + (B8  / ( 8 *  7))) * w + (B6  / ( 6 *  5))) * w
 
   46                + (B4  / ( 4 *  3))) * w + (B2  / ( 2 *  1))) / x
 
   47                + 0.5 * LOG_2PI - log(v) - x + (x - 0.5) * log(x);
 
   51double tgamma(
double x)  
 
   56        return 1/x < 0 ? -HUGE_VAL : HUGE_VAL;
 
   59        if (x < 0) 
goto domain_error;
 
   63        static double zero = 0.0;
 
   72        sign = (fmod(i, 2.0) != 0.0) ? 1 : -1;
 
   73        return sign * PI / (sin(PI * f) * exp(loggamma(1 - x)));
 
   77    return exp(loggamma(x));
 
   79    x = lgamma_r(x, &sign);
 
#define errno
Ractor-aware version of errno.