float lgammaf(float x) { float y; if (isnanf(x)) return (x * x); y = (float)__k_lgamma((double)x, &signgamf); signgam = signgamf; /* SUSv3 requires the setting of signgam */ return (y); }
double gamma(double x) { double g; if (!finite(x)) return (x * x); g = rint(x); if (x == g && x <= 0.0) { signgam = 1; return (_SVID_libm_err(x, x, 41)); } g = __k_lgamma(x, &signgam); if (!finite(g)) g = _SVID_libm_err(x, x, 40); return (g); }
float lgammaf_r(float x, int *signgamfp) { if (isnanf(x)) return (x * x); return ((float)__k_lgamma((double)x, signgamfp)); }