246 lines · 2.7 KB · Text
RawDownload
scale = 50define e(x) {	auto a, b, c, d, e, g, w, y, t, r 	r = ibase	ibase = A 	t = scale	scale = t + .434*x + 1 	w = 0	if(x<0) {		x = -x		w = 1	}	y = 0	while(x>2) {		x /= 2		y++	} 	a = 1	b = 1	c = b	d = 1	e = 1	for(a=1; 1; a++) {		b *= x		c = c*a+b		d *= a		g = c/d		if(g == e) {			g = g/1			while(y--) {				g *= g			}			scale = t			if(w==1) {				ibase = r				return 1/g			}			ibase = r			return g/1		}		e = g	}} define l(x) {	auto a, b, c, d, e, f, g, u, s, t, r, z 	r = ibase	ibase = A	if(x <= 0) {		z = 1-10^scale		ibase = r		return z	}	t = scale 	f = 1	scale += scale(x) - length(x) + 1	s = scale	while(x > 2) {		s += (length(x)-scale(x))/2 + 1		if(s>0) {			scale = s		}		x = sqrt(x)		f *= 2	}	while(x < .5) {		s += (length(x)-scale(x))/2 + 1		if(s>0) {			scale = s		}		x = sqrt(x)		f *= 2	} 	scale = t + length(f) - scale(f) + 1	u = (x-1)/(x+1) 	scale += 1.1*length(t) - 1.1*scale(t)	s = u*u	b = 2*f	c = b	d = 1	e = 1	for(a=3; 1; a=a+2){		b *= s		c = c*a + d*b		d *= a		g = c/d		if(g==e) {			scale = t			ibase = r			return u*c/d		}		e = g	}} define s(x) {	auto a, b, c, s, t, y, p, n, i, r 	r = ibase	ibase = A	t = scale	y = x/.7853	s = t + length(y) - scale(y)	if(s<t) {		s = t	}	scale = s	p = a(1) 	scale = 0	if(x>=0) {		n = (x/(2*p)+1)/2	}	if(x<0) {		n = (x/(2*p)-1)/2	}	x -= 4*n*p	if(n%2 != 0) {		x = -x	} 	scale = t + length(1.2*t) - scale(1.2*t)	y = -x*x	a = x	b = 1	s = x	for(i=3; 1; i+=2) {		a *= y		b *= i*(i-1)		c = a/b		if(c==0){			scale = t			ibase = r			return s/1		}		s += c	}} define c(x) {	auto t, r 	r = ibase	ibase = A	t = scale	scale = scale+1	x = s(x + 2*a(1))	scale = t	ibase = r	return x/1} define a(x) {	auto a, b, c, d, e, f, g, s, t, r, z 	r = ibase	ibase = A	if(x==0) {		return 0	}	if(x==1) {		z = .7853981633974483096156608458198757210492923498437764/1		ibase = r		if(scale<52) {			return z		}	}	t = scale	f = 1	while(x > .5) {		scale++		x = -(1 - sqrt(1.+x*x))/x		f *= 2	}	while(x < -.5) {		scale++		x = -(1 - sqrt(1.+x*x))/x		f *= 2	}	s = -x*x	b = f	c = f	d = 1	e = 1	for(a=3; 1; a+=2) {		b *= s		c = c*a + d*b		d *= a		g = c/d		if(g==e) {			scale = t			ibase = r			return x*c/d		}		e = g	}} define j(n,x) {	auto a,b,c,d,e,g,i,s,k,t,r 	r = ibase	ibase = A 	t = scale	k = 1.36*x + 1.16*t - n	k = length(k) - scale(k)	if(k>0) {		scale += k	} 	s = -x*x/4	if(n<0) {		n = -n		x = -x	}	a = 1	c = 1	for(i=1; i<=n; i++) {		a *= x		c *= 2*i	}	b = a	d = 1	e = 1	for(i=1; 1; i++) {		a *= s		b = b*i*(n+i) + a		c *= i*(n+i)		g = b/c		if(g==e) {			scale = t			ibase = r			return g/1		}		e = g	}}