Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
scale = 50
2
define e(x) {
3
	auto a, b, c, d, e, g, w, y, t, r
4
 
5
	r = ibase
6
	ibase = A
7
 
8
	t = scale
9
	scale = t + .434*x + 1
10
 
11
	w = 0
12
	if(x<0) {
13
		x = -x
14
		w = 1
15
	}
16
	y = 0
17
	while(x>2) {
18
		x /= 2
19
		y++
20
	}
21
 
22
	a = 1
23
	b = 1
24
	c = b
25
	d = 1
26
	e = 1
27
	for(a=1; 1; a++) {
28
		b *= x
29
		c = c*a+b
30
		d *= a
31
		g = c/d
32
		if(g == e) {
33
			g = g/1
34
			while(y--) {
35
				g *= g
36
			}
37
			scale = t
38
			if(w==1) {
39
				ibase = r
40
				return 1/g
41
			}
42
			ibase = r
43
			return g/1
44
		}
45
		e = g
46
	}
47
}
48
 
49
define l(x) {
50
	auto a, b, c, d, e, f, g, u, s, t, r, z
51
 
52
	r = ibase
53
	ibase = A
54
	if(x <= 0) {
55
		z = 1-10^scale
56
		ibase = r
57
		return z
58
	}
59
	t = scale
60
 
61
	f = 1
62
	scale += scale(x) - length(x) + 1
63
	s = scale
64
	while(x > 2) {
65
		s += (length(x)-scale(x))/2 + 1
66
		if(s>0) {
67
			scale = s
68
		}
69
		x = sqrt(x)
70
		f *= 2
71
	}
72
	while(x < .5) {
73
		s += (length(x)-scale(x))/2 + 1
74
		if(s>0) {
75
			scale = s
76
		}
77
		x = sqrt(x)
78
		f *= 2
79
	}
80
 
81
	scale = t + length(f) - scale(f) + 1
82
	u = (x-1)/(x+1)
83
 
84
	scale += 1.1*length(t) - 1.1*scale(t)
85
	s = u*u
86
	b = 2*f
87
	c = b
88
	d = 1
89
	e = 1
90
	for(a=3; 1; a=a+2){
91
		b *= s
92
		c = c*a + d*b
93
		d *= a
94
		g = c/d
95
		if(g==e) {
96
			scale = t
97
			ibase = r
98
			return u*c/d
99
		}
100
		e = g
101
	}
102
}
103
 
104
define s(x) {
105
	auto a, b, c, s, t, y, p, n, i, r
106
 
107
	r = ibase
108
	ibase = A
109
	t = scale
110
	y = x/.7853
111
	s = t + length(y) - scale(y)
112
	if(s<t) {
113
		s = t
114
	}
115
	scale = s
116
	p = a(1)
117
 
118
	scale = 0
119
	if(x>=0) {
120
		n = (x/(2*p)+1)/2
121
	}
122
	if(x<0) {
123
		n = (x/(2*p)-1)/2
124
	}
125
	x -= 4*n*p
126
	if(n%2 != 0) {
127
		x = -x
128
	}
129
 
130
	scale = t + length(1.2*t) - scale(1.2*t)
131
	y = -x*x
132
	a = x
133
	b = 1
134
	s = x
135
	for(i=3; 1; i+=2) {
136
		a *= y
137
		b *= i*(i-1)
138
		c = a/b
139
		if(c==0){
140
			scale = t
141
			ibase = r
142
			return s/1
143
		}
144
		s += c
145
	}
146
}
147
 
148
define c(x) {
149
	auto t, r
150
 
151
	r = ibase
152
	ibase = A
153
	t = scale
154
	scale = scale+1
155
	x = s(x + 2*a(1))
156
	scale = t
157
	ibase = r
158
	return x/1
159
}
160
 
161
define a(x) {
162
	auto a, b, c, d, e, f, g, s, t, r, z
163
 
164
	r = ibase
165
	ibase = A
166
	if(x==0) {
167
		return 0
168
	}
169
	if(x==1) {
170
		z = .7853981633974483096156608458198757210492923498437764/1
171
		ibase = r
172
		if(scale<52) {
173
			return z
174
		}
175
	}
176
	t = scale
177
	f = 1
178
	while(x > .5) {
179
		scale++
180
		x = -(1 - sqrt(1.+x*x))/x
181
		f *= 2
182
	}
183
	while(x < -.5) {
184
		scale++
185
		x = -(1 - sqrt(1.+x*x))/x
186
		f *= 2
187
	}
188
	s = -x*x
189
	b = f
190
	c = f
191
	d = 1
192
	e = 1
193
	for(a=3; 1; a+=2) {
194
		b *= s
195
		c = c*a + d*b
196
		d *= a
197
		g = c/d
198
		if(g==e) {
199
			scale = t
200
			ibase = r
201
			return x*c/d
202
		}
203
		e = g
204
	}
205
}
206
 
207
define j(n,x) {
208
	auto a,b,c,d,e,g,i,s,k,t,r
209
 
210
	r = ibase
211
	ibase = A
212
 
213
	t = scale
214
	k = 1.36*x + 1.16*t - n
215
	k = length(k) - scale(k)
216
	if(k>0) {
217
		scale += k
218
	}
219
 
220
	s = -x*x/4
221
	if(n<0) {
222
		n = -n
223
		x = -x
224
	}
225
	a = 1
226
	c = 1
227
	for(i=1; i<=n; i++) {
228
		a *= x
229
		c *= 2*i
230
	}
231
	b = a
232
	d = 1
233
	e = 1
234
	for(i=1; 1; i++) {
235
		a *= s
236
		b = b*i*(n+i) + a
237
		c *= i*(n+i)
238
		g = b/c
239
		if(g==e) {
240
			scale = t
241
			ibase = r
242
			return g/1
243
		}
244
		e = g
245
	}
246
}