bc.library (4237B)
1 /* 2 * Copyright (C) Caldera International Inc. 2001-2002. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code and documentation must retain the above 9 * copyright notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. All advertising materials mentioning features or use of this software 14 * must display the following acknowledgement: 15 * This product includes software developed or owned by Caldera 16 * International, Inc. 17 * 4. Neither the name of Caldera International, Inc. nor the names of other 18 * contributors may be used to endorse or promote products derived from 19 * this software without specific prior written permission. 20 * 21 * USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA 22 * INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 * IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE FOR ANY DIRECT, 26 * INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 27 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 30 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 31 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32 * POSSIBILITY OF SUCH DAMAGE. 33 */ 34 35 /* 36 * 37 * @(#)bc.library 8.1 (Berkeley) 6/6/93 38 */ 39 40 scale = 20 41 define e(x){ 42 auto a, b, c, d, e, g, t, w, y 43 44 t = scale 45 scale = t + .434*x + 1 46 47 w = 0 48 if(x<0){ 49 x = -x 50 w = 1 51 } 52 y = 0 53 while(x>2){ 54 x = x/2 55 y = y + 1 56 } 57 58 a=1 59 b=1 60 c=b 61 d=1 62 e=1 63 for(a=1;1==1;a++){ 64 b=b*x 65 c=c*a+b 66 d=d*a 67 g = c/d 68 if(g == e){ 69 g = g/1 70 while(y--){ 71 g = g*g 72 } 73 scale = t 74 if(w==1) return(1/g) 75 return(g/1) 76 } 77 e=g 78 } 79 } 80 81 define l(x){ 82 auto a, b, c, d, e, f, g, u, s, t 83 if(x <=0) return(1-10^scale) 84 t = scale 85 86 f=1 87 scale = scale + scale(x) - length(x) + 1 88 s=scale 89 while(x > 2){ 90 s = s + (length(x)-scale(x))/2 + 1 91 if(s>0) scale = s 92 x = sqrt(x) 93 f=f*2 94 } 95 while(x < .5){ 96 s = s + (length(x)-scale(x))/2 + 1 97 if(s>0) scale = s 98 x = sqrt(x) 99 f=f*2 100 } 101 102 scale = t + length(f) - scale(f) + 1 103 u = (x-1)/(x+1) 104 105 scale = scale + 1.1*length(t) - 1.1*scale(t) 106 s = u*u 107 b = 2*f 108 c = b 109 d = 1 110 e = 1 111 for(a=3;1==1;a=a+2){ 112 b=b*s 113 c=c*a+d*b 114 d=d*a 115 g=c/d 116 if(g==e){ 117 scale = t 118 return(u*c/d) 119 } 120 e=g 121 } 122 } 123 124 define s(x){ 125 auto a, b, c, s, t, y, p, n, i 126 t = scale 127 y = x/.7853 128 s = t + length(y) - scale(y) 129 if(s<t) s=t 130 scale = s 131 p = a(1) 132 133 scale = 0 134 if(x>=0) n = (x/(2*p)+1)/2 135 if(x<0) n = (x/(2*p)-1)/2 136 x = x - 4*n*p 137 if(n%2!=0) x = -x 138 139 scale = t + length(1.2*t) - scale(1.2*t) 140 y = -x*x 141 a = x 142 b = 1 143 s = x 144 for(i=3; 1==1; i=i+2){ 145 a = a*y 146 b = b*i*(i-1) 147 c = a/b 148 if(c==0){scale=t; return(s/1)} 149 s = s+c 150 } 151 } 152 153 define c(x){ 154 auto t 155 t = scale 156 scale = scale+1 157 x = s(x+2*a(1)) 158 scale = t 159 return(x/1) 160 } 161 162 define a(x){ 163 auto a, b, c, d, e, f, g, s, t 164 if(x==0) return(0) 165 if(x==1) { 166 if(scale<52) { 167 return(.7853981633974483096156608458198757210492923498437764/1) 168 } 169 } 170 t = scale 171 f=1 172 while(x > .5){ 173 scale = scale + 1 174 x= -(1-sqrt(1.+x*x))/x 175 f=f*2 176 } 177 while(x < -.5){ 178 scale = scale + 1 179 x = -(1-sqrt(1.+x*x))/x 180 f=f*2 181 } 182 s = -x*x 183 b = f 184 c = f 185 d = 1 186 e = 1 187 for(a=3;1==1;a=a+2){ 188 b=b*s 189 c=c*a+d*b 190 d=d*a 191 g=c/d 192 if(g==e){ 193 scale = t 194 return(x*c/d) 195 } 196 e=g 197 } 198 } 199 200 define j(n,x){ 201 auto a,b,c,d,e,g,i,s,k,t 202 203 t = scale 204 k = 1.36*x + 1.16*t - n 205 k = length(k) - scale(k) 206 if(k>0) scale = scale + k 207 208 s= -x*x/4 209 if(n<0){ 210 n= -n 211 x= -x 212 } 213 a=1 214 c=1 215 for(i=1;i<=n;i++){ 216 a=a*x 217 c = c*2*i 218 } 219 b=a 220 d=1 221 e=1 222 for(i=1;1;i++){ 223 a=a*s 224 b=b*i*(n+i) + a 225 c=c*i*(n+i) 226 g=b/c 227 if(g==e){ 228 scale = t 229 return(g/1) 230 } 231 e=g 232 } 233 }