Пример #1
0
double
tgamma(double x)
{
	struct Double u;

	if (x >= 6) {
		if(x > 171.63)
			return (x / zero);
		u = large_gam(x);
		return(__exp__D(u.a, u.b));
	} else if (x >= 1.0 + LEFT + x0)
		return (small_gam(x));
	else if (x > 1.e-17)
		return (smaller_gam(x));
	else if (x > -1.e-17) {
		if (x != 0.0)
			u.a = one - tiny;	/* raise inexact */
		return (one/x);
	} else if (!finite(x))
		return (x - x);		/* x is NaN or -Inf */
	else
		return (neg_gam(x));
}
Пример #2
0
double
tgamma(double x)
{
	struct Double u;
#if _IEEE
	endian = (*(int *) &one) ? 1 : 0;
#endif

	if (x >= 6) {
		if(x > 171.63)
			if (_IEEE)
				return (x/zero);
			else
				return (infnan(ERANGE));
		u = large_gam(x);
		return(__exp__D(u.a, u.b));
	} else if (x >= 1.0 + LEFT + x0)
		return (small_gam(x));
	else if (x > 1.e-17)
		return (smaller_gam(x));
	else if (x > -1.e-17) {
		if (x == 0.0) {
			if (!_IEEE)
				return (infnan(ERANGE));
		} else {
			u.a = one - tiny;	/* raise inexact */
		}
		return (one/x);
	} else if (!finite(x)) {
		if (_IEEE)		/* x = NaN, -Inf */
			return (x - x);
		else
			return (infnan(EDOM));
	 } else
		return (neg_gam(x));
}