tbclib - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tbclib (2742B)
       ---
            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 }