Blame specfunc/TODO

Packit 67cb25
# -*- org -*-
Packit 67cb25
#+CATEGORY: specfunc
Packit 67cb25
Packit 67cb25
* Complex hypergeometric function  1F1
Packit 67cb25
Packit 67cb25
* Could probably return immediately for exact zeros in 3j,6j,9j
Packit 67cb25
functions.  Easiest to implement for 3j.
Packit 67cb25
Packit 67cb25
  Note from Serge Winitzki <serge@cosmos.phy.tufts.edu>:
Packit 67cb25
Packit 67cb25
  The package "matpack" (www.matpack.de) includes many special functions, 
Packit 67cb25
  also the 3j symbols. They refer to some quite complicated numerical 
Packit 67cb25
  methods using recursion relations to get the right answers for large 
Packit 67cb25
  momenta, and to 1975-1976 papers by Schulten and Gordon for the 
Packit 67cb25
  description of the algorithms. The papers can be downloaded for free at
Packit 67cb25
  http://www.ks.uiuc.edu/Publications/Papers/ 
Packit 67cb25
Packit 67cb25
  http://www.ks.uiuc.edu/Publications/Papers/abstract.cgi?tbcode=SCHU76B
Packit 67cb25
  http://www.ks.uiuc.edu/Publications/Papers/abstract.cgi?tbcode=SCHU75A
Packit 67cb25
  http://www.ks.uiuc.edu/Publications/Papers/abstract.cgi?tbcode=SCHU75
Packit 67cb25
Packit 67cb25
* add Fresnel Integrals to specfunc.  See TOMS 723 + 2 subsequent
Packit 67cb25
errata.
Packit 67cb25
Packit 67cb25
* make mode variables consistent in specfunc -- some seem to be
Packit 67cb25
unnecessary from performance point of view since the speed difference
Packit 67cb25
is negligible.
Packit 67cb25
Packit 67cb25
* From: "Alexander Babansky" <babansky@mail.ru>
Packit 67cb25
To: "Brian Gough" <bjg@network-theory.co.uk>
Packit 67cb25
Subject: Re: gsl-1.2
Packit 67cb25
Date: Sun, 3 Nov 2002 14:15:15 -0500
Packit 67cb25
Packit 67cb25
Hi Brian,
Packit 67cb25
May I suggest you to add another function to gsl-1.2 ?
Packit 67cb25
It's a modified Ei(x) function:
Packit 67cb25
Packit 67cb25
Em(x)=exp(-x)*Ei(x);
Packit 67cb25
Packit 67cb25
As u  might know, Ei(x) raises as e^x on the negative interval.
Packit 67cb25
Therefore, Ei(100) is very very large.
Packit 67cb25
But Ei(100)*exp(-100) = 0.010;
Packit 67cb25
Packit 67cb25
Unfortunately, if u try x=800 u'll get overflow in Ei(800).
Packit 67cb25
but Ei(800)*exp(-800) should be around 0.0001;
Packit 67cb25
Packit 67cb25
Modified function Em(x) is used in cos, sin integrals such as:
Packit 67cb25
int_0^\infinity dx sin(bx)/(x^2+z^2)=(1/2z)*(Em(bz)-Em(-bz));
Packit 67cb25
Packit 67cb25
int_0^\infinity dx x cos(bx)/(x^2+z^2)=(1/2)*(Em(bz)+Em(-bz));
Packit 67cb25
Packit 67cb25
One of possible ways to add it to the library is:
Packit 67cb25
Em(x) = - PV int_0^\infinity e^(-t)/(t+x) dt
Packit 67cb25
Packit 67cb25
Sincerely,
Packit 67cb25
Alex
Packit 67cb25
Packit 67cb25
DONE: Wed Nov  6 13:06:42 MST 2002 [GJ]
Packit 67cb25
Packit 67cb25
Packit 67cb25
----------------------------------------------------------------------
Packit 67cb25
Packit 67cb25
The following should be finished before a 1.0 level release.
Packit 67cb25
Packit 67cb25
* Implement the conicalP_sph_reg() functions.
Packit 67cb25
  DONE: Fri Nov  6 23:33:53 MST 1998 [GJ]
Packit 67cb25
Packit 67cb25
* Irregular (Q) Legendre functions, at least
Packit 67cb25
  the integer order ones. More general cases
Packit 67cb25
  can probably wait.
Packit 67cb25
  DONE: Sat Nov  7 15:47:35 MST 1998 [GJ]
Packit 67cb25
Packit 67cb25
* Make hyperg_1F1() work right.
Packit 67cb25
  This is the last remaining source of test failures.
Packit 67cb25
  The problem is with an unstable recursion in certain cases.
Packit 67cb25
  Look for the recursion with the variable named "start_pair";
Packit 67cb25
  this is stupid hack to keep track of when the recursion
Packit 67cb25
  result is going the wrong way for awhile by remembering the
Packit 67cb25
  minimum value. An error estimate is amde from that. But it
Packit 67cb25
  is just a hack. Somethign must be done abou that case.
Packit 67cb25
Packit 67cb25
* Clean-up Coulomb wave functions. This does not
Packit 67cb25
  mean completing a fully controlled low-energy
Packit 67cb25
  evaluation, which is a larger project.
Packit 67cb25
  DONE: Sun May 16 13:49:47 MDT 1999 [GJ]
Packit 67cb25
Packit 67cb25
* Clean-up the Fermi-Dirac code. The full Fermi-Dirac
Packit 67cb25
  functions can probably wait until a later release,
Packit 67cb25
  but we should have at least the common j = integer and
Packit 67cb25
  j = 1/2-integer cases for the 1.0 release. These
Packit 67cb25
  are not too hard.
Packit 67cb25
  DONE: Sat Nov  7 19:46:27 MST 1998 [GJ]
Packit 67cb25
Packit 67cb25
* Go over the tests and make sure nothing is left out.
Packit 67cb25
Packit 67cb25
* Sanitize all the error-checking, error-estimation,
Packit 67cb25
  algorithm tuning, etc.
Packit 67cb25
Packit 67cb25
* Fill out our scorecard, working from Lozier's
Packit 67cb25
  "Software Needs in Special Functions" paper.
Packit 67cb25
Packit 67cb25
* Final Seal of Approval
Packit 67cb25
  This section has itself gone through several
Packit 67cb25
  revisions (sigh), proving that the notion of
Packit 67cb25
  done-ness is ill-defined. So it is worth
Packit 67cb25
  stating the criteria for done-ness explicitly:
Packit 67cb25
  o interfaces stabilized
Packit 67cb25
  o error-estimation in place
Packit 67cb25
  o all deprecated constructs removed
Packit 67cb25
  o passes tests
Packit 67cb25
Packit 67cb25
Packit 67cb25
  - airy.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - airy_der.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - airy_zero.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - atanint.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - bessel.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_I0.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - bessel_I1.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - bessel_In.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_Inu.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_J0.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
    
Packit 67cb25
  - bessel_J1.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
    
Packit 67cb25
  - bessel_Jn.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_Jnu.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_K0.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - bessel_K1.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - bessel_Kn.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - bessel_Knu.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_Y0.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
    
Packit 67cb25
  - bessel_Y1.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
    
Packit 67cb25
  - bessel_Yn.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_Ynu.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_amp_phase.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_i.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_j.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_k.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - bessel_olver.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_sequence.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_temme.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_y.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - bessel_zero.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - beta.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - chebyshev.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - clausen.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - coulomb.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - coulomb_bound.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - coupling.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - dawson.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - debye.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - dilog.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - elementary.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - ellint.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - elljac.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - erfc.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - exp.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - expint.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - expint3.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - fermi_dirac.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - gamma.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - gamma_inc.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - gegenbauer.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - hyperg.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - hyperg_0F1.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - hyperg_1F1.c
Packit 67cb25
Packit 67cb25
  - hyperg_2F0.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - hyperg_2F1.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - hyperg_U.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - laguerre.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - legendre_H3d.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - legendre_Qn.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - legendre_con.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - legendre_poly.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - log.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - poch.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - poly.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - pow_int.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - psi.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - result.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - shint.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - sinint.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - synchrotron.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - transport.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS: 
Packit 67cb25
Packit 67cb25
  - trig.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
  - zeta.c
Packit 67cb25
    INTERFACES:
Packit 67cb25
    ERRORESTIM:
Packit 67cb25
    DEPRECATED:
Packit 67cb25
    PASSTESTS:
Packit 67cb25
Packit 67cb25
Packit 67cb25
Packit 67cb25
----------------------------------------------------------------------
Packit 67cb25
Packit 67cb25
The following are important but probably will
Packit 67cb25
not see completion before a 1.0 level release.
Packit 67cb25
Packit 67cb25
* Incomplete Fermi-Dirac functions.
Packit 67cb25
  Other Fermi-Dirac functions, including the
Packit 67cb25
  generic 1/2-integer case, which was not done.
Packit 67cb25
Packit 67cb25
* Implement the low-energy regime for the Coulomb
Packit 67cb25
  wave functions. This is fairly well understood in
Packit 67cb25
  the recent literature but will require some
Packit 67cb25
  detailed work. Specifically this means creating
Packit 67cb25
  a drop-in replacement for coulomb_jwkb() which
Packit 67cb25
  is controlled and extensible.
Packit 67cb25
Packit 67cb25
* General Legendre functions (at least on the cut).
Packit 67cb25
  This subsumes the toroidal functions, so we need not
Packit 67cb25
  consider those separately. SLATEC code exists (originally
Packit 67cb25
  due to Olver+Smith).
Packit 67cb25
Packit 67cb25
* Characterize the algorithms. A significant fraction of
Packit 67cb25
  the code is home-grown and it should be reviewed by
Packit 67cb25
  other parties.
Packit 67cb25
Packit 67cb25
Packit 67cb25
----------------------------------------------------------------------
Packit 67cb25
Packit 67cb25
The following are extra features which need not
Packit 67cb25
be implemented for a version 1.0 release.
Packit 67cb25
Packit 67cb25
* Spheroidal wave functions.
Packit 67cb25
Packit 67cb25
* Mathieu functions.
Packit 67cb25
Packit 67cb25
* Weierstrass elliptic functions.
Packit 67cb25
Packit 67cb25
Packit 67cb25
----------------------------------------------------------------------
Packit 67cb25
Packit 67cb25
Improve accuracy of ERF
Packit 67cb25
Packit 67cb25
NNTP-Posting-Date: Thu, 11 Sep 2003 07:41:42 -0500
Packit 67cb25
From: "George Marsaglia" <geo@stat.fsu.edu>
Packit 67cb25
Newsgroups: comp.lang.c
Packit 67cb25
References: <t4J7b.18514$98.4310@nwrddc03.gnilink.net>
Packit 67cb25
Subject: Re: When (32-bit) double precision isn't precise enough
Packit 67cb25
Date: Thu, 11 Sep 2003 08:41:40 -0400
Packit 67cb25
X-Priority: 3
Packit 67cb25
X-MSMail-Priority: Normal
Packit 67cb25
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
Packit 67cb25
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Packit 67cb25
Message-ID: <wq2dnQBikNwb8P2iU-KYvg@comcast.com>
Packit 67cb25
Lines: 265
Packit 67cb25
NNTP-Posting-Host: 68.35.247.101
Packit 67cb25
X-Trace: sv3-4YY+jkhhdeQvGKAREa99vDBFHJoKVqVBdUTSuRxA71OwlgxX0uUFnKYs54FlnUs0Xb6BRngKigkd75d!tKin8l8rAQKylaP+4vzTI3AO33bivOw1lKDZUUtXe4lUMW1qn+goUp/Pfksstg==
Packit 67cb25
X-Complaints-To: abuse@comcast.net
Packit 67cb25
X-DMCA-Complaints-To: dmca@comcast.net
Packit 67cb25
X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers
Packit 67cb25
X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly
Packit 67cb25
X-Postfilter: 1.1
Packit 67cb25
Packit 67cb25
Packit 67cb25
Why most of those who deal with the normal integral in probability
Packit 67cb25
theory are still stuck with the historical baggage of the error function
Packit 67cb25
is a puzzle to me, as is the poor quality of the results one gets from
Packit 67cb25
standard library implementations of erf().  (One of the most common
Packit 67cb25
 is based on ALGORITHM AS66, APPL. STATIST.(1973) Vol.22, .424 by HILL,
Packit 67cb25
 which gives only 6-8 digit accuracy).
Packit 67cb25
Packit 67cb25
Here is a listing of my method:
Packit 67cb25
Packit 67cb25
/*
Packit 67cb25
Marsaglia Complementary Normal Distribution Function
Packit 67cb25
   cPhi(x) = integral from x to infinity of exp(-.5*t^2)/sqrt(2*pi), x<15
Packit 67cb25
 15-digit accuracy for x<15, returns 0 for x>15.
Packit 67cb25
#include <math.h>
Packit 67cb25
*/
Packit 67cb25
Packit 67cb25
double cPhi(double x){
Packit 67cb25
long double v[]={0.,.65567954241879847154L,
Packit 67cb25
.42136922928805447322L,.30459029871010329573L,
Packit 67cb25
.23665238291356067062L,.19280810471531576488L,
Packit 67cb25
.16237766089686746182L,.14010418345305024160L,
Packit 67cb25
.12313196325793229628L,.10978728257830829123L,
Packit 67cb25
.99028596471731921395e-1L,.90175675501064682280e-1L,
Packit 67cb25
.82766286501369177252e-1L,.76475761016248502993e-1L,
Packit 67cb25
.71069580538852107091e-1L,.66374235823250173591e-1L};
Packit 67cb25
long double h,a,b,z,t,sum,pwr;
Packit 67cb25
int i,j;
Packit 67cb25
      if(x>15.) return (0.);
Packit 67cb25
      if(x<-15.) return (1.);
Packit 67cb25
        j=fabs(x)+1.;
Packit 67cb25
        z=j;
Packit 67cb25
        h=fabs(x)-z;
Packit 67cb25
        a=v[j];
Packit 67cb25
        b=z*a-1.;
Packit 67cb25
        pwr=1.;
Packit 67cb25
        sum=a+h*b;
Packit 67cb25
           for(i=2;i<60;i+=2){
Packit 67cb25
           a=(a+z*b)/i;
Packit 67cb25
           b=(b+z*a)/(i+1);
Packit 67cb25
           pwr=pwr*h*h;
Packit 67cb25
           t=sum;
Packit 67cb25
           sum=sum+pwr*(a+h*b);
Packit 67cb25
           if(sum==t) break; }
Packit 67cb25
      sum=sum*exp(-.5*x*x-.91893853320467274178L);
Packit 67cb25
      if(x<0.) sum=1.-sum;
Packit 67cb25
      return ((double) sum);
Packit 67cb25
                      }
Packit 67cb25
*/
Packit 67cb25
 end of listing
Packit 67cb25
*/
Packit 67cb25
Packit 67cb25
The method is based on defining phi(x)=exp(-x^2)/sqrt(2pi) and
Packit 67cb25
Packit 67cb25
       R(x)=cPhi(x)/phi(x).
Packit 67cb25
Packit 67cb25
The function R(x) is well-behaved  and terms of its Taylor
Packit 67cb25
series are readily obtained by a two-term recursion.   With an accurate
Packit 67cb25
representation of R(x) at ,say, x=0,1,2,...,15, a simple evaluation
Packit 67cb25
of the Taylor series at intermediate points provides up to
Packit 67cb25
15 digits of accuracy.
Packit 67cb25
An article describing the method will be in the new version of
Packit 67cb25
my Diehard CDROM.   A new version of the Diehard tests
Packit 67cb25
of randomness (but not yet the new DVDROM) is at
Packit 67cb25
   http://www.csis.hku.hk/~diehard/
Packit 67cb25
Packit 67cb25
Packit 67cb25
 George Marsaglia