home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 150.MATHLIB0.PAS < prev    next >
Pascal/Delphi Source File  |  1988-05-25  |  2KB  |  66 lines

  1. UNIT MathLib0;
  2.  
  3. INTERFACE
  4. USES Extended_Reals;
  5.  
  6. FUNCTION log (x:REAL) : REAL;
  7.  
  8. FUNCTION exp10 (x:REAL) : REAL;
  9.  
  10. FUNCTION sinc (x:REAL) : REAL;
  11.  
  12. (****************************************************************************)
  13.  
  14. IMPLEMENTATION
  15.  
  16. CONST
  17.    ln10 = 2.302585092994046;
  18.  
  19. FUNCTION log (x:REAL) : REAL;
  20.  
  21.    BEGIN
  22.       log:=ln(x)/ln10;
  23.    END;
  24.  
  25. FUNCTION exp10 (x:REAL) : REAL;
  26.  
  27.    BEGIN
  28.       exp10:=exp(x*ln10);
  29.    END;
  30.  
  31. FUNCTION sinc (x:REAL) : REAL;
  32.  
  33. { The accuracy of sin(x)/x for small x was tested up to MaxInt to be  }
  34. { within 1e-6 of the value computed from the Taylor series expansion. }
  35.  
  36.    CONST
  37.       s : ARRAY [1..6] OF REAL
  38.         = (+1.00000000000000,                { +1/1!  }
  39.            -0.16666666666667,                { -1/3!  }
  40.            +8.33333333333333e-3,             { +1/5!  }
  41.            -1.98412698412698e-4,             { -1/7!  }
  42.            +2.75573192239859e-6,             { +1/9!  }
  43.            -2.50521083854417e-8);            { -1/11! }
  44.  
  45.    VAR
  46.       xx   : REAL;                           { xx = x^2 }
  47.       temp : REAL;
  48.  
  49.    BEGIN   {sinc}
  50.       IF (abs(x) < (PI/MaxInt))
  51.          THEN BEGIN
  52.             {Calculate sinc(x) from Taylor Series}
  53.             {to avoid arithmetic overflow}
  54.             xx:=x*x;
  55.             temp:=xx*(s[4]+xx*(s[5]+xx*s[6]));
  56.             sinc:=s[1]+xx*(s[2]+xx*(s[3]+temp));
  57.          END   {THEN}
  58.          ELSE
  59.             sinc:=sin(x)/x;
  60.    END;   {sinc}
  61.  
  62. (****************************************************************************)
  63.  
  64. BEGIN   {Initialization}
  65. END.   {MathLib0}
  66.