Math-Cephes

 view release on metacpan or  search on metacpan

pmath  view on Meta::CPAN

	      'radian' => 'radian: Degrees, minutes, seconds to radians

 SYNOPSIS:

 # double d, m, s, radian();

 $r = radian( $d, $m, $s );

DESCRIPTION:

 Converts an angle of degrees, minutes, seconds to radians.

 ',

          'igamc' => 'igamc:  Complemented incomplete gamma integral

SYNOPSIS:

 # double a, x, y, igamc();

 $y = igamc( $a, $x );

 DESCRIPTION:

 The function is defined by

  igamc(a,x)   =   1 - igam(a,x)

                            inf.
                              -
                     1       | |  -t  a-1
               =   -----     |   e   t   dt.
                    -      | |
                   | (a)    -
                             x

 In this implementation both arguments must be positive.
 The integral is evaluated by either a power series or
 continued fraction expansion, depending on the relative
 values of a and x.

 ',
          'lgam' => 'lgam:  Natural logarithm of gamma function

SYNOPSIS:

 # double x, y, lgam();
 # extern int sgngam;

 $y = lgam( $x );

DESCRIPTION:

 Returns the base e (2.718...) logarithm of the absolute
 value of the gamma function of the argument.
 The sign (+1 or -1) of the gamma function is returned in a
 global (extern) variable named sgngam.

 For arguments greater than 13, the logarithm of the gamma
 function is approximated by the logarithmic version of
 Stirling\'s formula using a polynomial approximation of
 degree 4. Arguments between -33 and +33 are reduced by
 recurrence to the interval [2,3] of a rational approximation.
 The cosecant reflection formula is employed for arguments
 less than -33.

 Arguments greater than MAXLGM return MAXNUM and an error
 message.  MAXLGM = 2.035093e36 for DEC
 arithmetic or 2.556348e305 for IEEE arithmetic.

',
          'nbdtri' => 'nbdtri:  Functional inverse of negative binomial distribution

SYNOPSIS:

 # int k, n;
 # double p, y, nbdtri();

 $p = nbdtri( $k, $n, $y );

 DESCRIPTION:

 Finds the argument p such that nbdtr(k,n,p) is equal to y.

 ',
          'yn' => 'yn:  Bessel function of second kind of integer order

SYNOPSIS:

 # double x, y, yn();
 # int n;

 $y = yn( $n, $x );

DESCRIPTION:

 Returns Bessel function of order n, where n is a
 (possibly negative) integer.

 The function is evaluated by forward recurrence on
 n, starting with values computed by the routines
 y0() and y1().

 If n = 0 or 1 the routine for y0 or y1 is called
 directly.

',
          'igami' => 'igami:  Inverse of complemented imcomplete gamma integral

SYNOPSIS:

 # double a, x, p, igami();

 $x = igami( $a, $p );

 DESCRIPTION:

 Given p, the function finds x such that

  igamc( a, x ) = p.

 Starting with the approximate value

         3

pmath  view on Meta::CPAN

 then

     w = r cos y + i r sin y.

 ',
          'ellpe' => 'ellpe:  Complete elliptic integral of the second kind

SYNOPSIS:

 # double m1, y, ellpe();

 $y = ellpe( $m1 );

DESCRIPTION:

 Approximates the integral

            pi/2
             -
            | |                 2
 E(m)  =    |    sqrt( 1 - m sin t ) dt
          | |    
           -
            0

 Where m = 1 - m1, using the approximation

      P(x)  -  x log x Q(x).

 Though there are no singularities, the argument m1 is used
 rather than m for compatibility with ellpk().

 E(1) = 1; E(0) = pi/2.

 ',
          'chdtr' => 'chdtr:  Chi-square distribution

SYNOPSIS:

 # double v, x, y, chdtr();

 $y = chdtr( $v, $x );

DESCRIPTION:

 Returns the area under the left hand tail (from 0 to x)
 of the Chi square probability density function with
 v degrees of freedom.

                                  inf.
                                    -
                        1          | |  v/2-1  -t/2
  P( x | v )   =   -----------     |   t      e     dt
                    v/2  -       | |
                   2    | (v/2)   -
                                   x

 where x is the Chi-square variable.

 The incomplete gamma integral is used, according to the
 formula

	y = chdtr( v, x ) = igam( v/2.0, x/2.0 ).

 The arguments must both be positive.

',
          'zetac' => 'zetac:  Riemann zeta function

SYNOPSIS:

 # double x, y, zetac();

 $y = zetac( $x );

DESCRIPTION:

               inf.
                 -    -x
   zetac(x)  =   >   k   ,   x > 1,
                 -
                k=2

 is related to the Riemann zeta function by

	Riemann zeta(x) = zetac(x) + 1.

 Extension of the function definition for x < 1 is implemented.
 Zero is returned for x > log2(MAXNUM).

 An overflow error may occur for large negative x, due to the
 gamma function in the reflection formula.

 ',
          'ellpj' => 'ellpj:  Jacobian Elliptic Functions

SYNOPSIS:

 # double u, m, sn, cn, dn, phi;
 # int ellpj();

 ($flag, $sn, $cn, $dn, $phi) = ellpj( $u, $m );

DESCRIPTION:

 Evaluates the Jacobian elliptic functions sn(u|m), cn(u|m),
 and dn(u|m) of parameter m between 0 and 1, and real
 argument u.

 These functions are periodic, with quarter-period on the
 real axis equal to the complete elliptic integral
 ellpk(1.0-m).

 Relation to incomplete elliptic integral:
 If u = ellik(phi,m), then sn(u|m) = sin(phi),
 and cn(u|m) = cos(phi).  Phi is called the amplitude of u.

 Computation is by means of the arithmetic-geometric mean
 algorithm, except when m is within 1e-9 of 0 or 1.  In the
 latter case with m close to 1, the approximation applies
 only for phi < pi/2.

 ',
          'jn' => 'jn:  Bessel function of integer order

SYNOPSIS:

 # int n;
 # double x, y, jn();

 $y = jn( $n, $x );

DESCRIPTION:

 Returns Bessel function of order n, where n is a
 (possibly negative) integer.

 The ratio of jn(x) to j0(x) is computed by backward
 recurrence.  First the ratio jn/jn-1 is found by a
 continued fraction expansion.  Then the recurrence
 relating successive orders is applied until j0 or j1 is
 reached.

 If n = 0 or 1 the routine for j0 or j1 is called
 directly.

',
          'ellpk' => 'ellpk:  Complete elliptic integral of the first kind

 SYNOPSIS:

 # double m1, y, ellpk();

 $y = ellpk( $m1 );

 DESCRIPTION:

 Approximates the integral

            pi/2
             -
            | |
            |           dt
 K(m)  =    |    ------------------
            |                   2
          | |    sqrt( 1 - m sin t )
           -
            0

 where m = 1 - m1, using the approximation

     P(x)  -  log x Q(x).

 The argument m1 is used rather than m so that the logarithmic
 singularity at m = 1 will be shifted to the origin; this
 preserves maximum accuracy.

 K(0) = pi/2.

 ',
          'chdtrc' => 'chdtrc:  Complemented Chi-square distribution

SYNOPSIS:

 # double v, x, y, chdtrc();

 $y = chdtrc( $v, $x );

DESCRIPTION:

 Returns the area under the right hand tail (from x to
 infinity) of the Chi square probability density function
 with v degrees of freedom:

                                  inf.
                                    -
                        1          | |  v/2-1  -t/2
  P( x | v )   =   -----------     |   t      e     dt
                    v/2  -       | |
                   2    | (v/2)   -
                                   x

 where x is the Chi-square variable.

 The incomplete gamma integral is used, according to the
 formula

	y = chdtrc( v, x ) = igamc( v/2.0, x/2.0 ).

 The arguments must both be positive.

',
          'beta' => 'beta:  Beta function

SYNOPSIS:

 # double a, b, y, beta();

 $y = beta( $a, $b );

DESCRIPTION:

                   -     -
                  | (a) | (b)
 beta( a, b )  =  -----------.
                     -
                    | (a+b)

 For large arguments the logarithm of the function is
 evaluated using lgam(), then exponentiated.

',
          'ceil' => 'ceil:  ceil

 ceil() returns the smallest integer greater than or equal
 to x.  It truncates toward plus infinity.

 SYNOPSIS:

 # double x, y, ceil();

 $y = ceil( $x );


',
          'spence' => 'spence:  Dilogarithm

SYNOPSIS:

 # double x, y, spence();

 $y = spence( $x );

DESCRIPTION:

 Computes the integral

                    x
                    -
                   | | log t
 spence(x)  =  -   |   ----- dt
                 | |   t - 1
                  -
                  1

 for x >= 0.  A rational approximation gives the integral in
 the interval (0.5, 1.5).  Transformation formulas for 1/x
 and 1-x are employed outside the basic expansion range.

',
          'chdtri' => 'chdtri:  Inverse of complemented Chi-square distribution

SYNOPSIS:

 # double df, x, y, chdtri();

 $x = chdtri( $df, $y );

 DESCRIPTION:

 Finds the Chi-square argument x such that the integral
 from x to infinity of the Chi-square density is equal
 to the given cumulative probability y.

 This is accomplished using the inverse gamma integral
 function and the relation

    x/2 = igami( df/2, y );


',
          'jv' => 'jv:  Bessel function of noninteger order

SYNOPSIS:

 # double v, x, y, jv();

 $y = jv( $v, $x );

DESCRIPTION:

 Returns Bessel function of order v of the argument,
 where v is real.  Negative x is allowed if v is an integer.

 Several expansions are included: the ascending power
 series, the Hankel expansion, and two transitional
 expansions for large v.  If v is not too large, it
 is reduced by recurrence to a region of best accuracy.
 The transitional expansions give 12D accuracy for v > 500.

',
          'btdtr' => 'btdtr:  Beta distribution

SYNOPSIS:

 # double a, b, x, y, btdtr();

 $y = btdtr( $a, $b, $x );

DESCRIPTION:

 Returns the area from zero to x under the beta density
 function:

                          x
            -             -
           | (a+b)       | |  a-1      b-1

pmath  view on Meta::CPAN


 char *fctnam;
 # int code;
 # int mtherr();

 mtherr( $fctnam, $code );

DESCRIPTION:

 This routine may be called to report one of the following
 error conditions (in the include file mconf.h).
  
   Mnemonic        Value          Significance

    DOMAIN            1       argument domain error
    SING              2       function singularity
    OVERFLOW          3       overflow range error
    UNDERFLOW         4       underflow range error
    TLOSS             5       total loss of precision
    PLOSS             6       partial loss of precision
    EDOM             33       Unix domain error code
    ERANGE           34       Unix range error code

 The default version of the file prints the function name,
 passed to it by the pointer fctnam, followed by the
 error condition.  The display is directed to the standard
 output device.  The routine then returns to the calling
 program.  Users may wish to modify the program to abort by
 calling exit() under severe error conditions such as domain
 errors.

 Since all error conditions pass control to this function,
 the display may be easily changed, eliminated, or directed
 to an error logging device.

 SEE ALSO:

 mconf.h




',
          'zeta' => 'zeta:  Riemann zeta function of two arguments

SYNOPSIS:

 # double x, q, y, zeta();

 $y = zeta( $x, $q );

DESCRIPTION:

                inf.
                  -        -x
   zeta(x,q)  =   >   (k+q)  
                  -
                 k=0

 where x > 1 and q is not a negative integer or zero.
 The Euler-Maclaurin summation formula is used to obtain
 the expansion

                n         
                -       -x
 zeta(x,q)  =   >  (k+q)  
                -         
               k=1        

           1-x                 inf.  B   x(x+1)...(x+2j)
      (n+q)           1         -     2j
  +  ---------  -  -------  +   >    --------------------
        x-1              x      -                   x+2j+1
                   2(n+q)      j=1       (2j)! (n+q)

 where the B2j are Bernoulli numbers.  Note that (see zetac.c)
 zeta(x,1) = zetac(x) + 1.

',
          'pow' => 'pow:  Power function

SYNOPSIS:

 # double x, y, z, pow();

 $z = pow( $x, $y );

DESCRIPTION:

 Computes x raised to the yth power.  Analytically,

      x**y  =  exp( y log(x) ).

 Following Cody and Waite, this program uses a lookup table
 of 2**-i/16 and pseudo extended precision arithmetic to
 obtain an extra three bits of accuracy in both the logarithm
 and the exponential.

',
          'kn' => 'kn:  Modified Bessel function, third kind, integer order

SYNOPSIS:

 # double x, y, kn();
 # int n;

 $y = kn( $n, $x );

DESCRIPTION:

 Returns modified Bessel function of the third kind
 of order n of the argument.

 The range is partitioned into the two intervals [0,9.55] and
 (9.55, infinity).  An ascending power series is used in the
 low range, and an asymptotic expansion in the high range.

',
          'cabs' => 'cabs:  Complex absolute value

SYNOPSIS:

pmath  view on Meta::CPAN

 Returns the sum of the first k terms of the Poisson
 distribution:

   k         j
   --   -m  m
   >   e    --
   --       j!
  j=0

 The terms are not summed directly; instead the incomplete
 gamma integral is employed, according to the relation

 y = pdtr( k, m ) = igamc( k+1, m ).

 The arguments must both be positive.

',
          'i0e' => 'i0e:  Modified Bessel function of order zero, exponentially scaled

SYNOPSIS:

 # double x, y, i0e();

 $y = i0e( $x );

DESCRIPTION:

 Returns exponentially scaled modified Bessel function
 of order zero of the argument.

 The function is defined as i0e(x) = exp(-|x|) j0( ix ).

',
          'floor' => 'floor:  floor

 floor() returns the largest integer less than or equal to x.
 It truncates toward minus infinity.

 SYNOPSIS:

 # double x, y, floor();

 $y = floor( $x );


',
          'struve' => 'struve:  Struve function

SYNOPSIS:

 # double v, x, y, struve();

 $y = struve( $v, $x );

DESCRIPTION:

 Computes the Struve function Hv(x) of order v, argument x.
 Negative x is rejected unless v is an integer.

 ',
	  'plancki' => 'plancki: Integral of Planck black body radiation formula
SYNOPSIS:

 # double lambda, T, y, plancki()

 $y = plancki( $lambda, $T );

DESCRIPTION:

 Evaluates the definite integral, from wavelength 0 to lambda,
 of the Planck radiation formula
                       -5
             c1  lambda
      E =  ------------------
             c2/(lambda T)
            e             - 1
 
 Physical constants c1 = 3.7417749e-16 and c2 = 0.01438769 are built in
 to the function program.  They are scaled to provide a result
 in watts per square meter.  Argument T represents temperature in degrees
 Kelvin; lambda is wavelength in meters.
',
	  'polylog' => 'polylog: polylogarithm function
SYNOPSIS:

 # double x, y, polylog();
 # int n;

     $y = polylog( $n, $x );

 The polylogarithm of order n is defined by the series

               inf   k
                -   x
   Li (x)  =    >   ---  .
     n          -     n
               k=1   k
 
   For x = 1,
 
                inf
                 -    1
    Li (1)  =    >   ---   =  Riemann zeta function (n)  .
      n          -     n
                k=1   k
 
  When n = 2, the function is the dilogarithm, related to the Spence integral:
 
                  x                      1-x
                  -                        -
                 | |  -ln(1-t)            | |  ln t
    Li (x)  =    |    -------- dt    =    |    ------ dt    =   spence(1-x) .
      2        | |       t              | |    1 - t
                -                        -
                 0                        1
',
	  'bernum' => 'bernum: Bernoulli numbers

SYNOPSIS:

    ($num, $den) = bernum( $n);
    ($num_array, $den_array) = bernum();

DESCRIPTION:

 This calculates the Bernoulli numbers, up to 30th order.
 If called with an integer argument, the numerator and denominator
 of that Bernoulli number is returned; if called with no argument,
 two array references representing the numerator and denominators
 of the first 30 Bernoulli numbers are returned.
',

pmath  view on Meta::CPAN


 y = igamc( b, ax ).

 ',
          'incbet' => 'incbet:  Incomplete beta integral

 SYNOPSIS:

 # double a, b, x, y, incbet();

 $y = incbet( $a, $b, $x );

 DESCRIPTION:

 Returns incomplete beta integral of the arguments, evaluated
 from zero to x.  The function is defined as

                  x
     -            -
    | (a+b)      | |  a-1     b-1
  -----------    |   t   (1-t)   dt.
   -     -     | |
  | (a) | (b)   -
                 0

 The domain of definition is 0 <= x <= 1.  In this
 implementation a and b are restricted to positive values.
 The integral from x to 1 may be obtained by the symmetry
 relation

    1 - incbet( a, b, x )  =  incbet( b, a, 1-x ).

 The integral is evaluated by a continued fraction expansion
 or, when b*x is small, by a power series.

 ',
          'nbdtr' => 'nbdtr:  Negative binomial distribution

SYNOPSIS:

 # int k, n;
 # double p, y, nbdtr();

 $y = nbdtr( $k, $n, $p );

 DESCRIPTION:

 Returns the sum of the terms 0 through k of the negative
 binomial distribution:

   k
   --  ( n+j-1 )   n      j
   >   (       )  p  (1-p)
   --  (   j   )
  j=0

 In a sequence of Bernoulli trials, this is the probability
 that k or fewer failures precede the nth success.

 The terms are not computed individually; instead the incomplete
 beta integral is employed, according to the formula

 y = nbdtr( k, n, p ) = incbet( n, k+1, p ).

 The arguments must be positive, with p ranging from 0 to 1.

 ',
          'fabs' => 'fabs:  	Absolute value

SYNOPSIS:

 # double x, y;

 $y = fabs( $x );

DESCRIPTION:
 
 Returns the absolute value of the argument.



',
          'powi' => 'powi:  Real raised to integer power

SYNOPSIS:

 # double x, y, powi();
 # int n;

 $y = powi( $x, $n );

DESCRIPTION:

 Returns argument x raised to the nth power.
 The routine efficiently decomposes n as a sum of powers of
 two. The desired power is a product of two-to-the-kth
 powers of x.  Thus to compute the 32767 power of x requires
 28 multiplications instead of 32767 multiplications.

',
          'i1e' => 'i1e:  Modified Bessel function of order one, exponentially scaled

SYNOPSIS:

 # double x, y, i1e();

 $y = i1e( $x );

DESCRIPTION:

 Returns exponentially scaled modified Bessel function
 of order one of the argument.

 The function is defined as i1(x) = -i exp(-|x|) j1( ix ).

',
          'exp2' => 'exp2:  Base 2 exponential function

SYNOPSIS:

 # double x, y, exp2();

pmath  view on Meta::CPAN

 argument and using a polynomial approximation to obtain
 a rough value for the square root.  Then Heron\'s iteration
 is used three times to converge to an accurate value.

',
          'tandg' => 'tandg:  Circular tangent of argument in degrees

SYNOPSIS:

 # double x, y, tandg();

 $y = tandg( $x );

DESCRIPTION:

 Returns the circular tangent of the argument x in degrees.

 Range reduction is modulo pi/4.  A rational function
       x + x**3 P(x**2)/Q(x**2)
 is employed in the basic interval [0, pi/4].

',
          'cosdg' => 'cosdg:  Circular cosine of angle in degrees

SYNOPSIS:

 # double x, y, cosdg();

 $y = cosdg( $x );

DESCRIPTION:

 Range reduction is into intervals of 45 degrees.

 Two polynomial approximating functions are employed.
 Between 0 and pi/4 the cosine is approximated by
      1  -  x**2 P(x**2).
 Between pi/4 and pi/2 the sine is represented as
      x  +  x**3 P(x**2).

 ',
          'fdtr' => 'fdtr:  F distribution

SYNOPSIS:

 # int df1, df2;
 # double x, y, fdtr();

 $y = fdtr( $df1, $df2, $x );

 DESCRIPTION:

 Returns the area from zero to x under the F density
 function (also known as Snedcor\'s density or the
 variance ratio density).  This is the density
 of x = (u1/df1)/(u2/df2), where u1 and u2 are random
 variables having Chi square distributions with df1
 and df2 degrees of freedom, respectively.

 The incomplete beta integral is used, according to the
 formula

	P(x) = incbet( df1/2, df2/2, df1*x/(df2 + df1*x) ).

 The arguments a and b are greater than zero, and x is
 nonnegative.

 ',
          'rgamma' => 'rgamma:  Reciprocal gamma function

SYNOPSIS:

 # double x, y, rgamma();

 $y = rgamma( $x );

DESCRIPTION:

 Returns one divided by the gamma function of the argument.

 The function is approximated by a Chebyshev expansion in
 the interval [0,1].  Range reduction is by recurrence
 for arguments between -34.034 and +34.84425627277176174.
 1/MAXNUM is returned for positive arguments outside this
 range.  For arguments less than -34.034 the cosecant
 reflection formula is applied; lograrithms are employed
 to avoid unnecessary overflow.

 The reciprocal gamma function has no singularities,
 but overflow and underflow may occur for large arguments.
 These conditions return either MAXNUM or 1/MAXNUM with
 appropriate sign.

 ',
          'shichi' => 'shichi:  Hyperbolic sine and cosine integrals

SYNOPSIS:

 # double x, Chi, Shi, shichi();

 ($flag, $Shi, $Chi) = shichi( $x );

 DESCRIPTION:

 Approximates the integrals

                            x
                            -
                           | |   cosh t - 1
   Chi(x) = eul + ln x +   |    -----------  dt,
                         | |          t
                          -
                          0

               x
               -
              | |  sinh t
   Shi(x) =   |    ------  dt
            | |       t
             -
             0

 where eul = 0.57721566490153286061 is Euler\'s constant.
 The integrals are evaluated by power series for x < 8
 and by Chebyshev expansions for x between 8 and 88.
 For large x, both functions approach exp(x)/2x.
 Arguments greater than 88 in magnitude return MAXNUM.

 ',
          'ndtr' => 'ndtr:  Normal distribution function

SYNOPSIS:

 # double x, y, ndtr();

 $y = ndtr( $x );

DESCRIPTION:

 Returns the area under the Gaussian probability density
 function, integrated from minus infinity to x:

                            x
                             -
                   1        | |          2
    ndtr(x)  = ---------    |    exp( - t /2 ) dt

pmath  view on Meta::CPAN

 mantissa, and multiplication by the cube root of 1, 2, or 4
 approximates the root to within about 0.1%.  Then Newton\'s
 iteration is used three times to converge to an accurate
 result.

',
          'exp' => 'exp:  Exponential function

 SYNOPSIS:

 # double x, y, exp();

 $y = exp( $x );

 DESCRIPTION:

 Returns e (2.71828...) raised to the x power.

 Range reduction is accomplished by separating the argument
 into an integer k and fraction f such that

     x    k  f
    e  = 2  e.

 A Pade\' form  1 + 2x P(x**2)/( Q(x**2) - P(x**2) )
 of degree 2/3 is used to approximate exp(f) in the basic
 interval [-0.5, 0.5].

 ',
          'threef0' => 'threef0:  Hypergeometric function 3F0

SYNOPSIS:

 # double a, b, c, x, value;

 # double *err;

 ($value, $err) = threef0( $a, $b, $c, $x )

 ',
          'hyperg' => 'hyperg:  Confluent hypergeometric function

SYNOPSIS:

 # double a, b, x, y, hyperg();

 $y = hyperg( $a, $b, $x );

DESCRIPTION:

 Computes the confluent hypergeometric function

                          1           2
                       a x    a(a+1) x
   F ( a,b;x )  =  1 + ---- + --------- + ...
  1 1                  b 1!   b(b+1) 2!

 Many higher transcendental functions are special cases of
 this power series.

 As is evident from the formula, b must not be a negative
 integer or zero unless a is an integer with 0 >= a > b.

 The routine attempts both a direct summation of the series
 and an asymptotic expansion.  In each case error due to
 roundoff, cancellation, and nonconvergence is estimated.
 The result with smaller estimated error is returned.

',
          'log2' => 'log2:  Base 2 logarithm

SYNOPSIS:

 # double x, y, log2();

 $y = log2( $x );

DESCRIPTION:

 Returns the base 2 logarithm of x.

 The argument is separated into its exponent and fractional
 parts.  If the exponent is between -1 and +1, the base e
 logarithm of the fraction is approximated by

     log(1+x) = x - 0.5 x**2 + x**3 P(x)/Q(x).

 Otherwise, setting  z = 2(x-1)/x+1),
 
     log(x) = z + z**3 P(z)/Q(z).

',
          'airy' => 'airy:  Airy function

SYNOPSIS:

 # double x, ai, aiprime, bi, biprime;
 # int airy();

 ($flag, $ai, $aiprime, $bi, $biprime) = airy( $x );

DESCRIPTION:

 Solution of the differential equation

	y"(x) = xy.

 The function returns the two independent solutions Ai, Bi
 and their first derivatives Ai\'(x), Bi\'(x).

 Evaluation is by power series summation for small x,
 by rational minimax approximations for large x.

',
          'onef2' => 'onef2:  Hypergeometric function 1F2

SYNOPSIS:

 # double a, b, c, x, value;

 # double *err;

 ($value, $err) = onef2( $a, $b, $c, $x)

 ',
	  'ei' => 'ei: Exponential integral
 
 
  SYNOPSIS:
 
  #double x, y, ei();
 
  $y = ei( $x );
 
 
 
  DESCRIPTION:
 
                x
                 -     t
                | |   e
     Ei(x) =   -|-   ---  dt .
              | |     t
               -
              -inf
  
  Not defined for x <= 0.
  See also expn.c.

',
          'expn' => 'expn:  	Exponential integral En

SYNOPSIS:

 # int n;
 # double x, y, expn();

 $y = expn( $n, $x );

DESCRIPTION:

 Evaluates the exponential integral

                 inf.
                   -
                  | |   -xt
                  |    e
      E (x)  =    |    ----  dt.
       n          |      n
                | |     t
                 -
                  1

 Both n and x must be nonnegative.

 The routine employs either a power series, a continued
 fraction, or an asymptotic formula depending on the
 relative values of n and x.

 ',
          'dawsn' => 'dawsn:  Dawson\'s Integral

SYNOPSIS:

 # double x, y, dawsn();

 $y = dawsn( $x );

DESCRIPTION:

 Approximates the integral

                             x
                             -
                      2     | |        2
  dawsn(x)  =  exp( -x  )   |    exp( t  ) dt
                          | |
                           -
                           0

 Three different rational approximations are employed, for
 the intervals 0 to 3.25; 3.25 to 6.25; and 6.25 up.

 ',
          'clog' => 'clog:  Complex natural logarithm

SYNOPSIS:

 # void clog();
 # cmplx z, w;

 $z = cmplx(2, 3);    # $z = 2 + 3 i
 $w = $z->clog;
 print $w->{r}, \'  \', $w->{i};  # prints real and imaginary parts of $w
 print $w->as_string;                 # prints $w as Re(w) + i Im(w)

 DESCRIPTION:

 Returns complex logarithm to the base e (2.718...) of
 the complex argument x.

 If z = x + iy, r = sqrt( x**2 + y**2 ),
 then
       w = log(r) + i arctan(y/x).
 
 The arctangent ranges from -PI to +PI.

 ',
          'acos' => 'acos:  Inverse circular cosine

SYNOPSIS:

 # double x, y, acos();

 $y = acos( $x );

DESCRIPTION:

pmath  view on Meta::CPAN

 ',
          'fresnl' => 'fresnl:  Fresnel integral

SYNOPSIS:

 # double x, S, C;
 # void fresnl();

 ($flag, $S, $C) = fresnl( $x );

 DESCRIPTION:

 Evaluates the Fresnel integrals

           x
           -
          | |
 C(x) =   |   cos(pi/2 t**2) dt,
        | |
         -
          0

           x
           -
          | |
 S(x) =   |   sin(pi/2 t**2) dt.
        | |
         -
          0

 The integrals are evaluated by a power series for x < 1.
 For x >= 1 auxiliary functions f(x) and g(x) are employed
 such that

 C(x) = 0.5 + f(x) sin( pi/2 x**2 ) - g(x) cos( pi/2 x**2 )
 S(x) = 0.5 - f(x) cos( pi/2 x**2 ) - g(x) sin( pi/2 x**2 )

',
          'psi' => 'psi:  Psi (digamma) function

 SYNOPSIS:

 # double x, y, psi();

 $y = psi( $x );

 DESCRIPTION:

              d      -
   psi(x)  =  -- ln | (x)
              dx

 is the logarithmic derivative of the gamma function.
 For integer x,
                   n-1
                    -
 psi(n) = -EUL  +   >  1/k.
                    -
                   k=1

 This formula is used for 0 < n <= 10.  If x is negative, it
 is transformed to a positive argument by the reflection
 formula  psi(1-x) = psi(x) + pi cot(pi x).
 For general positive x, the argument is made greater than 10
 using the recurrence  psi(x+1) = psi(x) + 1/x.
 Then the following asymptotic expansion is applied:

                           inf.   B
                            -      2k
 psi(x) = log(x) - 1/2x -   >   -------
                            -        2k
                           k=1   2k x

 where the B2k are Bernoulli numbers.

 ',
'csinh' => 'csinh: Complex hyperbolic sine
 
 
  SYNOPSIS:
 
  # void csinh();
  # cmplx z, w;
 
 $z = cmplx(2, 3);    # z = 2 + 3 i
 $w = $z->csinh;
 print $w->{r}, "  ", $w->{i};  # prints real and imaginary parts of $w
 print $w->as_string;                 # prints $w as Re(w) + i Im(w)

 
  DESCRIPTION:
 
  csinh z = (cexp(z) - cexp(-z))/2
          = sinh x * cos y  +  i cosh x * sin y .
 
',
	     'casinh' => 'casinh: Complex inverse hyperbolic sine
 
 
  SYNOPSIS:
 
  # void casinh();
  # cmplx z, w;
 
 $z = cmplx(2, 3);    # $z = 2 + 3 i
 $w = $z->casinh;
 print $w->{r}, "  ", $w->{i};  # prints real and imaginary parts of $w
 print $w->as_string;                 # prints $w as Re(w) + i Im(w) 
 
  DESCRIPTION:
 
  casinh z = -i casin iz .
 
', 
	     'ccosh' => 'ccosh: Complex hyperbolic cosine
 
 
  SYNOPSIS:
 
  # void ccosh();
  # cmplx z, w;
  
 $z = cmplx(2, 3);    # $z = 2 + 3 i

pmath  view on Meta::CPAN

          'k0e' => 'k0e:  Modified Bessel function, third kind, order zero, exponentially scaled

SYNOPSIS:

 # double x, y, k0e();

 $y = k0e( $x );

DESCRIPTION:

 Returns exponentially scaled modified Bessel function
 of the third kind of order zero of the argument.

      k0e(x) = exp(x) * k0(x).

',
          'erfc' => 'erfc:  Complementary error function

SYNOPSIS:

 # double x, y, erfc();

 $y = erfc( $x );

DESCRIPTION:

  1 - erf(x) =

                           inf. 
                             -
                  2         | |          2
   erfc(x)  =  --------     |    exp( - t  ) dt
               sqrt(pi)   | |
                           -
                            x

 For small x, erfc(x) = 1 - erf(x); otherwise rational
 approximations are computed.

',
          'gamma' => 'gamma:  Gamma function

SYNOPSIS:

 # double x, y, gamma();
 # extern int sgngam;

 $y = gamma( $x );

DESCRIPTION:

 Returns gamma function of the argument.  The result is
 correctly signed, and the sign (+1 or -1) is also
 returned in a global (extern) variable named sgngam.
 This variable is also filled in by the logarithmic gamma
 function lgam().

 Arguments |x| <= 34 are reduced by recurrence and the function
 approximated by a rational function of degree 6/7 in the
 interval (2,3).  Large arguments are handled by Stirling\'s
 formula. Large negative arguments are made positive using
 a reflection formula.  

 ',
          'incbi' => 'incbi:  Inverse of imcomplete beta integral

SYNOPSIS:

 # double a, b, x, y, incbi();

 $x = incbi( $a, $b, $y );

DESCRIPTION:

 Given y, the function finds x such that

  incbet( a, b, x ) = y .

 The routine performs interval halving or Newton iterations to find the
 root of incbet(a,b,x) - y = 0.

 ',
          'round' => 'round:  Round double to nearest or even integer valued double

SYNOPSIS:

 # double x, y, round();

 $y = round( $x );

DESCRIPTION:

 Returns the nearest integer to x as a double precision
 floating point result.  If x ends in 0.5 exactly, the
 nearest even integer is chosen.
 

 ',
          'drand' => 'drand:  Pseudorandom number generator

SYNOPSIS:

 # double y, drand();

 ($flag, $y) = drand( );

DESCRIPTION:

 Yields a random number 1.0 <= y < 2.0.

 The three-generator congruential algorithm by Brian
 Wichmann and David Hill (BYTE magazine, March, 1987,
 pp 127-8) is used. The period, given by them, is
 6953607871644.

 Versions invoked by the different arithmetic compile
 time options DEC, IBMPC, and MIEEE, produce
 approximately the same sequences, differing only in the
 least significant bits of the numbers. The UNK option
 implements the algorithm as recommended in the BYTE
 article.  It may be used on all computers. However,
 the low order bits of a double precision number may

pmath  view on Meta::CPAN

SYNOPSIS:

 # void casin();
 # cmplx z, w;

 $z = cmplx(2, 3);    # $z = 2 + 3 i
 $w = $z->casin;
 print $w->{r}, \'  \', $w->{i};  # prints real and imaginary parts of $w
 print $w->as_string;                 # prints $w as Re(w) + i Im(w)

 DESCRIPTION:

 Inverse complex sine:

                               2
 w = -i clog( iz + csqrt( 1 - z ) ).

 ',
          'acosh' => 'acosh:  Inverse hyperbolic cosine

 SYNOPSIS:

 # double x, y, acosh();

 $y = acosh( $x );

DESCRIPTION:

 Returns inverse hyperbolic cosine of argument.

 If 1 <= x < 1.5, a rational approximation

	sqrt(z) * P(z)/Q(z)

 where z = x-1, is used.  Otherwise,

 acosh(x)  =  log( x + sqrt( (x-1)(x+1) ).

',
          'bdtrc' => 'bdtrc:  Complemented binomial distribution

SYNOPSIS:

 # int k, n;
 # double p, y, bdtrc();

 $y = bdtrc( $k, $n, $p );

 DESCRIPTION:

 Returns the sum of the terms k+1 through n of the Binomial
 probability density:

   n
   --  ( n )   j      n-j
   >   (   )  p  (1-p)
   --  ( j )
  j=k+1

 The terms are not summed directly; instead the incomplete
 beta integral is employed, according to the formula

 y = bdtrc( k, n, p ) = incbet( k+1, n-k, p ).

 The arguments must be positive, with p ranging from 0 to 1.

 ',
          'gdtr' => 'gdtr:  Gamma distribution function

SYNOPSIS:

 # double a, b, x, y, gdtr();

 $y = gdtr( $a, $b, $x );

DESCRIPTION:

 Returns the integral from zero to x of the gamma probability
 density function:

                x
        b       -
       a       | |   b-1  -at
 y =  -----    |    t    e    dt
       -     | |
      | (b)   -
               0

  The incomplete gamma integral is used, according to the
 relation

 y = igam( b, ax ).

 ',
          'lrand' => 'lrand:  Pseudorandom number generator

SYNOPSIS:

 long y, lrand();

 $y = lrand( );

DESCRIPTION:

 Yields a long integer random number.

 The three-generator congruential algorithm by Brian
 Wichmann and David Hill (BYTE magazine, March, 1987,
 pp 127-8) is used. The period, given by them, is
 6953607871644.




',
          'sinh' => 'sinh:  Hyperbolic sine

SYNOPSIS:

 # double x, y, sinh();

 $y = sinh( $x );

DESCRIPTION:

 Returns hyperbolic sine of argument in the range MINLOG to
 MAXLOG.

 The range is partitioned into two segments.  If |x| <= 1, a
 rational function of the form x + x**3 P(x)/Q(x) is employed.
 Otherwise the calculation is sinh(x) = ( exp(x) - exp(-x) )/2.

',
          'fdtrc' => 'fdtrc:  Complemented F distribution

SYNOPSIS:

 # int df1, df2;
 # double x, y, fdtrc();

 $y = fdtrc( $df1, $df2, $x );

 DESCRIPTION:

 Returns the area from x to infinity under the F density
 function (also known as Snedcor\'s density or the
 variance ratio density).

                      inf.
                       -
              1       | |  a-1      b-1
 1-P(x)  =  ------    |   t    (1-t)    dt
            B(a,b)  | |
                     -
                      x

 The incomplete beta integral is used, according to the
 formula

	P(x) = incbet( df2/2, df1/2, df2/(df2 + df1*x) ).

 ',
          'bdtri' => 'bdtri:  Inverse binomial distribution

SYNOPSIS:

 # int k, n;
 # double p, y, bdtri();

 $p = bdtri( $k, $n, $y );

 DESCRIPTION:

 Finds the event probability p such that the sum of the
 terms 0 through k of the Binomial probability density
 is equal to the given cumulative probability y.

 This is accomplished using the inverse beta integral
 function and the relation

 1 - p = incbi( n-k, k+1, y ).

 ',
          'atan2' => 'atan2:  Quadrant correct inverse circular tangent

SYNOPSIS:

 # double x, y, z, atan2();

 $z = atan2( $y, $x );

DESCRIPTION:

 Returns radian angle whose tangent is y/x.
 Define compile time symbol ANSIC = 1 for ANSI standard,
 range -PI < z <= +PI, args (y,x); else ANSIC = 0 for range
 0 to 2PI, args (x,y).

',
          'lsqrt' => 'lsqrt:  Integer square root

SYNOPSIS:

 long x, y;
 long lsqrt();

 $y = lsqrt( $x );

DESCRIPTION:

 Returns a long integer square root of the long integer
 argument.  The computation is by binary long division.

 The largest possible result is lsqrt(2,147,483,647)
 = 46341.

 If x < 0, the square root of |x| is returned, and an
 error message is printed.

pmath  view on Meta::CPAN


            2
 where w = x  and the two r\'s are zeros of the function.

 In the second interval, the Hankel asymptotic expansion
 is employed with two rational functions of degree 6/6
 and 7/7.

',
          'j1' => 'j1:  Bessel function of order one

SYNOPSIS:

 # double x, y, j1();

 $y = j1( $x );

DESCRIPTION:

 Returns Bessel function of order one of the argument.

 The domain is divided into the intervals [0, 8] and
 (8, infinity). In the first interval a 24 term Chebyshev
 expansion is used. In the second, the asymptotic
 trigonometric representation is employed using two
 rational functions of degree 5/5.

',
          'ldexp' => 'ldexp:  multiplies x by 2**n.

 SYNOPSIS:

 # double x, y, ldexp();
 # int n;

 $y = ldexp( $x, $n );


',
          'pdtrc' => 'pdtrc:  Complemented poisson distribution

SYNOPSIS:

 # int k;
 # double m, y, pdtrc();

 $y = pdtrc( $k, $m );

DESCRIPTION:

 Returns the sum of the terms k+1 to infinity of the Poisson
 distribution:

  inf.       j
   --   -m  m
   >   e    --
   --       j!
  j=k+1

 The terms are not summed directly; instead the incomplete
 gamma integral is employed, according to the formula

 y = pdtrc( k, m ) = igam( k+1, m ).

 The arguments must both be positive.

',
          'igam' => 'igam:  Incomplete gamma integral

SYNOPSIS:

 # double a, x, y, igam();

 $y = igam( $a, $x );

 DESCRIPTION:

 The function is defined by

                           x
                            -
                   1       | |  -t  a-1
  igam(a,x)  =   -----     |   e   t   dt.
                  -      | |
                 | (a)    -
                           0

 In this implementation both arguments must be positive.
 The integral is evaluated by either a power series or
 continued fraction expansion, depending on the relative
 values of a and x.

 ',
          'machconst' => 'machconst:  Globally declared constants

SYNOPSIS:

 extern double nameofconstant;

 DESCRIPTION:

 This file contains a number of mathematical constants and
 also some needed size parameters of the computer arithmetic.
 The values are supplied as arrays of hexadecimal integers
 for IEEE arithmetic; arrays of octal constants for DEC
 arithmetic; and in a normal decimal scientific notation for
 other machines.  The particular notation used is determined
 by a symbol (DEC, IBMPC, or UNK) defined in the include file
 mconf.h.

 The default size parameters are as follows.

 For DEC and UNK modes:
 MACHEP =  1.38777878078144567553E-17       2**-56
 MAXLOG =  8.8029691931113054295988E1       log(2**127)
 MINLOG = -8.872283911167299960540E1        log(2**-128)
 MAXNUM =  1.701411834604692317316873e38    2**127

 For IEEE arithmetic (IBMPC):
 MACHEP =  1.11022302462515654042E-16       2**-53
 MAXLOG =  7.09782712893383996843E2         log(2**1024)

pmath  view on Meta::CPAN

 series near these points.

 ',
          'cot' => 'cot:  Circular cotangent

SYNOPSIS:

 # double x, y, cot();

 $y = cot( $x );

DESCRIPTION:

 Returns the circular cotangent of the radian argument x.

 Range reduction is modulo pi/4.  A rational function
       x + x**3 P(x**2)/Q(x**2)
 is employed in the basic interval [0, pi/4].

',
          'asin' => 'asin:  Inverse circular sine

SYNOPSIS:

 # double x, y, asin();

 $y = asin( $x );

DESCRIPTION:

 Returns radian angle between -pi/2 and +pi/2 whose sine is x.

 A rational function of the form x + x**3 P(x**2)/Q(x**2)
 is used for |x| in the interval [0, 0.5].  If |x| > 0.5 it is
 transformed by the identity

    asin(x) = pi/2 - 2 asin( sqrt( (1-x)/2 ) ).

 ',
          'bdtr' => 'bdtr:  Binomial distribution

SYNOPSIS:

 # int k, n;
 # double p, y, bdtr();

 $y = bdtr( $k, $n, $p );

DESCRIPTION:

 Returns the sum of the terms 0 through k of the Binomial
 probability density:

   k
   --  ( n )   j      n-j
   >   (   )  p  (1-p)
   --  ( j )
  j=0

 The terms are not summed directly; instead the incomplete
 beta integral is employed, according to the formula

 $y = bdtr( k, n, p ) = incbet( n-k, k+1, 1-p ).

 The arguments must be positive, with p ranging from 0 to 1.

 ',
          'cosh' => 'cosh:  Hyperbolic cosine

SYNOPSIS:

 # double x, y, cosh();

 $y = cosh( $x );

DESCRIPTION:

 Returns hyperbolic cosine of argument in the range MINLOG to
 MAXLOG.

 cosh(x)  =  ( exp(x) + exp(-x) )/2.

',
          'sindg' => 'sindg:  Circular sine of angle in degrees

SYNOPSIS:

 # double x, y, sindg();

 $y = sindg( $x );

DESCRIPTION:

 Range reduction is into intervals of 45 degrees.

 Two polynomial approximating functions are employed.
 Between 0 and pi/4 the sine is approximated by
      x  +  x**3 P(x**2).
 Between pi/4 and pi/2 the cosine is represented as
      1  -  x**2 P(x**2).

',
          'k0' => 'k0:  Modified Bessel function, third kind, order zero

SYNOPSIS:

 # double x, y, k0();

 $y = k0( $x );

DESCRIPTION:

 Returns modified Bessel function of the third kind
 of order zero of the argument.

 The range is partitioned into the two intervals [0,8] and
 (8, infinity).  Chebyshev polynomial expansions are employed
 in each interval.

',
          'k1' => 'k1:  Modified Bessel function, third kind, order one

SYNOPSIS:

 # double x, y, k1();

 $y = k1( $x );

DESCRIPTION:

 Computes the modified Bessel function of the third kind
 of order one of the argument.

 The range is partitioned into the two intervals [0,2] and
 (2, infinity).  Chebyshev polynomial expansions are employed
 in each interval.

',
          'nbdtrc' => 'nbdtrc:  Complemented negative binomial distribution

SYNOPSIS:

 # int k, n;
 # double p, y, nbdtrc();

 $y = nbdtrc( $k, $n, $p );

 DESCRIPTION:

 Returns the sum of the terms k+1 to infinity of the negative
 binomial distribution:

   inf
   --  ( n+j-1 )   n      j
   >   (       )  p  (1-p)
   --  (   j   )
  j=k+1

 The terms are not computed individually; instead the incomplete
 beta integral is employed, according to the formula

 y = nbdtrc( k, n, p ) = incbet( k+1, n, 1-p ).

 The arguments must be positive, with p ranging from 0 to 1.

 ',
          'iv' => 'iv:  Modified Bessel function of noninteger order

SYNOPSIS:

 # double v, x, y, iv();

 $y = iv( $v, $x );

DESCRIPTION:

 Returns modified Bessel function of order v of the
 argument.  If x is negative, v must be integer valued.

 The function is defined as Iv(x) = Jv( ix ).  It is
 here computed in terms of the confluent hypergeometric
 function, according to the formula

              v  -x
 Iv(x) = (x/2)  e   hyperg( v+0.5, 2v+1, 2x ) / gamma(v+1)

 If v is a negative integer, then v is replaced by -v.

 '

	    );
}

sub get_descs {
  $topics{'trigs'} = "Help is available on the following functions: \n\n";
  foreach (sort qw(asin acos atan atan2 sin cos tan cot hypot
		   tandg cotdg sindg cosdg radian unity)) {
    (my $desc = $topics{$_}) =~ s!^(.*?\n).*!$1!s;
    $topics{'trigs'} .= $desc;
  }

  $topics{'hypers'} = "Help is available on the following functions: \n\n";
  foreach (sort qw(acosh asinh atanh sinh cosh tanh) ) {
    (my $desc = $topics{$_}) =~ s!^(.*?\n).*!$1!s;
    $topics{'hypers'} .= $desc;  
  }

  $topics{'explog'} = "Help is available on the following functions: \n\n";
  foreach (sort qw(unity exp exp10 exp2 log log10 log2 expxx)) {
    (my $desc = $topics{$_}) =~ s!^(.*?\n).*!$1!s;
    $topics{'explog'} .= $desc;  
  } 

  $topics{'complex'} = "Help is available on the following functions: \n\n";
  foreach (sort qw(clog cexp csin ccos ctan ccot casin cabs csqrt
		   cacos catan cadd csub cmul cdiv cmov cneg cmplx
		   csinh ccosh ctanh cpow casinh cacosh catanh) ) {
    (my $desc = $topics{$_}) =~ s!^(.*?\n).*!$1!s;
    $topics{'complex'} .= $desc unless $desc =~ /^\s*$/;;
  }

  $topics{'utils'} = "Help is available on the following functions: \n\n";
  foreach (sort qw(ceil floor frexp ldexp fabs fac cbrt
		   round sqrt lrand pow powi drand lsqrt ) ) {
    (my $desc = $topics{$_}) =~ s!^(.*?\n).*!$1!s;
    $topics{'utils'} .= $desc;
  }

  $topics{'bessels'} = "Help is available on the following functions: \n\n";
  foreach (sort qw( i0 i0e i1 i1e iv j0 j1 jn jv k0 k1 kn yn 
		    yv k0e k1e y0 y1) ) {
    (my $desc = $topics{$_}) =~ s!^(.*?\n).*!$1!s;
    $topics{'bessels'} .= $desc;
  }

  $topics{'dists'} = "Help is available on the following functions: \n\n";
  foreach (sort qw(bdtr bdtrc bdtri btdtr chdtr chdtrc chdtri 
		   fdtr fdtrc fdtri gdtr gdtrc nbdtr nbdtrc nbdtri 
		   ndtr ndtri pdtr pdtrc pdtri stdtr stdtri) ) {
    (my $desc = $topics{$_}) =~ s!^(.*?\n).*!$1!s;
    $topics{'dists'} .= $desc;
  } 



( run in 0.892 second using v1.01-cache-2.11-cpan-39bf76dae61 )