[BACK]Return to bc.library CVS log [TXT][DIR] Up to [local] / src / usr.bin / bc

Diff for /src/usr.bin/bc/bc.library between version 1.1 and 1.2

version 1.1, 2003/09/25 19:34:22 version 1.2, 2007/01/29 11:02:53
Line 39 
Line 39 
  */   */
   
 scale = 20  scale = 20
 define e(x){  define e(x) {
         auto a, b, c, d, e, g, t, w, y          auto a, b, c, d, e, g, t, w, y
   
         t = scale          t = scale
         scale = t + .434*x + 1          scale = t + .434*x + 1
   
         w = 0          w = 0
         if(x<0){          if (x < 0) {
                 x = -x                  x = -x
                 w = 1                  w = 1
         }          }
         y = 0          y = 0
         while(x>2){          while (x > 2) {
                 x = x/2                  x = x/2
                 y = y + 1                  y = y + 1
         }          }
   
         a=1          a = 1
         b=1          b = 1
         c=b          c = b
         d=1          d = 1
         e=1          e = 1
         for(a=1;1==1;a++){          for (a = 1; 1 == 1; a++) {
                 b=b*x                  b = b*x
                 c=c*a+b                  c = c*a + b
                 d=d*a                  d = d*a
                 g = c/d                  g = c/d
                 if(g == e){                  if (g == e) {
                         g = g/1                          g = g/1
                         while(y--){                          while (y--) {
                                 g = g*g                                  g = g*g
                         }                          }
                         scale = t                          scale = t
                         if(w==1) return(1/g)                          if (w == 1) return(1/g)
                         return(g/1)                          return(g/1)
                 }                  }
                 e=g                  e = g
         }          }
 }  }
   
 define l(x){  define l(x) {
         auto a, b, c, d, e, f, g, u, s, t          auto a, b, c, d, e, f, g, u, s, t
         if(x <=0) return(1-10^scale)          if (x <= 0) return (1 - 10^scale)
         t = scale          t = scale
   
         f=1          f = 1
         scale = scale + scale(x) - length(x) + 1          scale = scale + scale(x) - length(x) + 1
         s=scale          s = scale
         while(x > 2){          while (x > 2) {
                 s = s + (length(x)-scale(x))/2 + 1                  s = s + (length(x) - scale(x))/2 + 1
                 if(s>0) scale = s                  if (s > 0) scale = s
                 x = sqrt(x)                  x = sqrt(x)
                 f=f*2                  f = f*2
         }          }
         while(x < .5){          while (x < .5) {
                 s = s + (length(x)-scale(x))/2 + 1                  s = s + (length(x) - scale(x))/2 + 1
                 if(s>0) scale = s                  if (s > 0) scale = s
                 x = sqrt(x)                  x = sqrt(x)
                 f=f*2                  f = f*2
         }          }
   
         scale = t + length(f) - scale(f) + 1          scale = t + length(f) - scale(f) + 1
         u = (x-1)/(x+1)          u = (x - 1)/(x + 1)
   
         scale = scale + 1.1*length(t) - 1.1*scale(t)          scale = scale + 1.1*length(t) - 1.1*scale(t)
         s = u*u          s = u*u
Line 109 
Line 109 
         c = b          c = b
         d = 1          d = 1
         e = 1          e = 1
         for(a=3;1==1;a=a+2){          for (a = 3; 1 == 1 ; a = a + 2) {
                 b=b*s                  b = b*s
                 c=c*a+d*b                  c = c*a + d*b
                 d=d*a                  d = d*a
                 g=c/d                  g = c/d
                 if(g==e){                  if (g == e) {
                         scale = t                          scale = t
                         return(u*c/d)                          return (u*c/d)
                 }                  }
                 e=g                  e = g
         }          }
 }  }
   
 define s(x){  define s(x) {
         auto a, b, c, s, t, y, p, n, i          auto a, b, c, s, t, y, p, n, i
         t = scale          t = scale
         y = x/.7853          y = x/.7853
         s = t + length(y) - scale(y)          s = t + length(y) - scale(y)
         if(s<t) s=t          if (s < t) s = t
         scale = s          scale = s
         p = a(1)          p = a(1)
   
         scale = 0          scale = 0
         if(x>=0) n = (x/(2*p)+1)/2          if (x >= 0) n = (x/(2*p) + 1)/2
         if(x<0) n = (x/(2*p)-1)/2          if (x < 0) n = (x/(2*p) - 1)/2
         x = x - 4*n*p          x = x - 4*n*p
         if(n%2!=0) x = -x          if (n % 2 != 0) x = -x
   
         scale = t + length(1.2*t) - scale(1.2*t)          scale = t + length(1.2*t) - scale(1.2*t)
         y = -x*x          y = -x*x
         a = x          a = x
         b = 1          b = 1
         s = x          s = x
         for(i=3; 1==1; i=i+2){          for (i =3 ; 1 == 1; i = i + 2) {
                 a = a*y                  a = a*y
                 b = b*i*(i-1)                  b = b*i*(i - 1)
                 c = a/b                  c = a/b
                 if(c==0){scale=t; return(s/1)}                  if (c == 0) {
                 s = s+c                          scale = t
                           return (s/1)
                   }
                   s = s + c
         }          }
 }  }
   
 define c(x){  define c(x) {
         auto t          auto t
         t = scale          t = scale
         scale = scale+1          scale = scale + 1
         x = s(x+2*a(1))          x = s(x + 2*a(1))
         scale = t          scale = t
         return(x/1)          return (x/1)
 }  }
   
 define a(x){  define a(x) {
         auto a, b, c, d, e, f, g, s, t          auto a, b, c, d, e, f, g, s, t
         if(x==0) return(0)          if (x == 0) return(0)
         if(x==1) {          if (x == 1) {
                 if(scale<52) {                  if (scale < 52) {
                         return(.7853981633974483096156608458198757210492923498437764/1)                          return(.7853981633974483096156608458198757210492923498437764/1)
                 }                  }
         }          }
         t = scale          t = scale
         f=1          f = 1
         while(x > .5){          while (x > .5) {
                 scale = scale + 1                  scale = scale + 1
                 x= -(1-sqrt(1.+x*x))/x                  x = -(1 - sqrt(1. + x*x))/x
                 f=f*2                  f = f*2
         }          }
         while(x < -.5){          while (x < -.5) {
                 scale = scale + 1                  scale = scale + 1
                 x = -(1-sqrt(1.+x*x))/x                  x = -(1 - sqrt(1. + x*x))/x
                 f=f*2                  f = f*2
         }          }
         s = -x*x          s = -x*x
         b = f          b = f
         c = f          c = f
         d = 1          d = 1
         e = 1          e = 1
         for(a=3;1==1;a=a+2){          for (a = 3; 1 == 1; a = a + 2) {
                 b=b*s                  b = b*s
                 c=c*a+d*b                  c = c*a + d*b
                 d=d*a                  d = d*a
                 g=c/d                  g = c/d
                 if(g==e){                  if (g == e) {
                         scale = t                          scale = t
                         return(x*c/d)                          return (x*c/d)
                 }                  }
                 e=g                  e = g
         }          }
 }  }
   
 define j(n,x){  define j(n,x) {
         auto a,b,c,d,e,g,i,s,k,t          auto a,b,c,d,e,g,i,s,k,t
   
         t = scale          t = scale
         k = 1.36*x + 1.16*t - n          k = 1.36*x + 1.16*t - n
         k = length(k) - scale(k)          k = length(k) - scale(k)
         if(k>0) scale = scale + k          if (k > 0) scale = scale + k
   
         s= -x*x/4          s = -x*x/4
         if(n<0){          if (n < 0) {
                 n= -n                  n = -n
                 x= -x                  x = -x
         }          }
         a=1          a = 1
         c=1          c = 1
         for(i=1;i<=n;i++){          for (i = 1; i <= n; i++) {
                 a=a*x                  a = a*x
                 c = c*2*i                  c = c*2*i
         }          }
         b=a          b = a
         d=1          d = 1
         e=1          e = 1
         for(i=1;1;i++){          for (i = 1; 1; i++) {
                 a=a*s                  a = a*s
                 b=b*i*(n+i) + a                  b = b*i*(n + i) + a
                 c=c*i*(n+i)                  c = c*i*(n + i)
                 g=b/c                  g = b/c
                 if(g==e){                  if (g == e) {
                         scale = t                          scale = t
                         return(g/1)                          return (g/1)
                 }                  }
                 e=g                  e = g
         }          }
 }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2