BSD 4_2 release
[unix-history] / usr / src / usr.lib / lib.b
CommitLineData
5dc6eab8
C
1/* lib.b 4.1 83/04/02 */
2
3scale = 20
4define e(x){
5 auto a, b, c, d, e, g, w, y
6
7 t = scale
8 scale = t + .434*x + 1
9
10 w = 0
11 if(x<0){
12 x = -x
13 w = 1
14 }
15 y = 0
16 while(x>2){
17 x = x/2
18 y = y + 1
19 }
20
21 a=1
22 b=1
23 c=b
24 d=1
25 e=1
26 for(a=1;1==1;a++){
27 b=b*x
28 c=c*a+b
29 d=d*a
30 g = c/d
31 if(g == e){
32 g = g/1
33 while(y--){
34 g = g*g
35 }
36 scale = t
37 if(w==1) return(1/g)
38 return(g/1)
39 }
40 e=g
41 }
42}
43
44define l(x){
45 auto a, b, c, d, e, f, g, u, s, t
46 if(x <=0) return(1-10^scale)
47 t = scale
48
49 f=1
50 scale = scale + scale(x) - length(x) + 1
51 s=scale
52 while(x > 2){
53 s = s + (length(x)-scale(x))/2 + 1
54 if(s>0) scale = s
55 x = sqrt(x)
56 f=f*2
57 }
58 while(x < .5){
59 s = s + (length(x)-scale(x))/2 + 1
60 if(s>0) scale = s
61 x = sqrt(x)
62 f=f*2
63 }
64
65 scale = t + length(f) - scale(f) + 1
66 u = (x-1)/(x+1)
67
68 scale = scale + 1.1*length(t) - 1.1*scale(t)
69 s = u*u
70 b = 2*f
71 c = b
72 d = 1
73 e = 1
74 for(a=3;1==1;a=a+2){
75 b=b*s
76 c=c*a+d*b
77 d=d*a
78 g=c/d
79 if(g==e){
80 scale = t
81 return(u*c/d)
82 }
83 e=g
84 }
85}
86
87define s(x){
88 auto a, b, c, s, t, y, p, n, i
89 t = scale
90 y = x/.7853
91 s = t + length(y) - scale(y)
92 if(s<t) s=t
93 scale = s
94 p = a(1)
95
96 scale = 0
97 if(x>=0) n = (x/(2*p)+1)/2
98 if(x<0) n = (x/(2*p)-1)/2
99 x = x - 4*n*p
100 if(n%2!=0) x = -x
101
102 scale = t + length(1.2*t) - scale(1.2*t)
103 y = -x*x
104 a = x
105 b = 1
106 s = x
107 for(i=3; 1==1; i=i+2){
108 a = a*y
109 b = b*i*(i-1)
110 c = a/b
111 if(c==0){scale=t; return(s/1)}
112 s = s+c
113 }
114}
115
116define c(x){
117 auto t
118 t = scale
119 scale = scale+1
120 x = s(x+2*a(1))
121 scale = t
122 return(x/1)
123}
124
125define a(x){
126 auto a, b, c, d, e, f, g, s, t
127 if(x==0) return(0)
128 if(x==1)
129 if(scale<52)
130return(.7853981633974483096156608458198757210492923498437764/1)
131 t = scale
132 f=1
133 while(x > .5){
134 scale = scale + 1
135 x= -(1-sqrt(1.+x*x))/x
136 f=f*2
137 }
138 while(x < -.5){
139 scale = scale + 1
140 x = -(1-sqrt(1.+x*x))/x
141 f=f*2
142 }
143 s = -x*x
144 b = f
145 c = f
146 d = 1
147 e = 1
148 for(a=3;1==1;a=a+2){
149 b=b*s
150 c=c*a+d*b
151 d=d*a
152 g=c/d
153 if(g==e){
154 scale = t
155 return(x*c/d)
156 }
157 e=g
158 }
159}
160
161define j(n,x){
162auto a,b,c,d,e,g,i,s,k,t
163
164 t = scale
165 k = 1.36*x + 1.16*t - n
166 k = length(k) - scale(k)
167 if(k>0) scale = scale + k
168
169s= -x*x/4
170if(n<0){
171 n= -n
172 x= -x
173 }
174a=1
175c=1
176for(i=1;i<=n;i++){
177 a=a*x
178 c = c*2*i
179 }
180b=a
181d=1
182e=1
183for(i=1;1;i++){
184 a=a*s
185 b=b*i*(n+i) + a
186 c=c*i*(n+i)
187 g=b/c
188 if(g==e){
189 scale = t
190 return(g/1)
191 }
192 e=g
193 }
194}