Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.forth > #9321

Re: ZGAMMA revisited

From mhx@iae.nl (Marcel Hendrix)
Subject Re: ZGAMMA revisited
Newsgroups comp.lang.forth
Message-ID <97140304028435@frunobulax.edu> (permalink)
Date 2012-01-31 00:21 +0200
References <bba646d9-97f7-4473-839a-6cf446a880f0@q8g2000yqa.googlegroups.com>
Organization SunSITE.dk - Supporting Open source

Show all headers | View raw


Krishna Myneni <krishna.myneni@ccreweb.org> writes Re: ZGAMMA revisited

> On Jan 29, 5:05=A0pm, mhx@iae.nl (Marcel Hendrix) wrote:
>> In 2011, there was an extended CLF thread on computing the ZGAMMA function.

>> Here's ZGAMMA once GMP, MPFR and MPC are made available to the Forth system.

> What's MPC? A multi-precision complex library. Is it part of the
> package released by David Williams?

No, but I ported it after I finished adapting David's package for Windows
(GMP and MPFR wrongly assume long ints are 64 bit wide). MPC is a nice companion 
package, but it does (did:-) not have complex gamma and error functions.
[..]
> Looks great. Have you checked its performance very near its poles? As
> I recall, that's where the TOMS programs had serious issues.

I have (now) tested it with the parameter values listed on 
ftp://ccreweb.org/software/fsl/extras/. I went and fetched 
71-decimal-place ref result values from Wolfram/Alpha. 

As you can see below, the maximum absolute error is 10^-31 around 
the origin, which is the maximum error Glendon Pugh designed them 
for (in 'An analysis of the Lanczos Gamma approximation' (PhD thesis, 2004)).

The ZWOFZ results are also listed, although I didn't show yet how to 
implement this word using MPC.

-marcel

-- ----------------------------------------------------

Reference values for the complex Gamma function
from http://wolframalpha.com [71 places]

z#gamma(  0.00e-0001 -1.99e-0007 i) error =  9.09e-0032
z#gamma( -2.00e+0000 -1.99e-0007 i) error =  1.25e-0043
z#gamma( -2.00e+0000 -2.00e+0000 i) error =  1.06e-0043
z#gamma(  1.00e+0000 -1.99e-0007 i) error =  6.35e-0047
z#gamma(  1.00e+0000 -2.00e+0000 i) error =  5.35e-0040
z#gamma(  5.00e-0001  0.00e-0001 i) error =  8.98e-0053
z#gamma(  1.00e+0000  0.00e-0001 i) error =  1.00e-0068
z#gamma(  2.00e+0000  0.00e-0001 i) error =  7.88e-0068
z#gamma(  5.00e+0000  0.00e-0001 i) error =  6.69e-0065
z#gamma( -2.50e+0000 -2.50e+0000 i) error =  1.43e-0044
z#gamma( -2.50e+0000 -2.00e+0000 i) error =  1.57e-0044
z#gamma( -2.50e+0000 -1.50e+0000 i) error =  1.69e-0044
z#gamma( -2.50e+0000 -1.00e+0000 i) error =  1.79e-0044
z#gamma( -2.50e+0000 -5.00e-0001 i) error =  1.84e-0044
z#gamma( -2.50e+0000  0.00e-0001 i) error =  1.86e-0044
z#gamma( -2.50e+0000  5.00e-0001 i) error =  1.84e-0044
z#gamma( -2.00e+0000 -3.00e+0000 i) error =  8.58e-0044
z#gamma( -2.00e+0000 -2.00e+0000 i) error =  1.06e-0043
z#gamma( -2.00e+0000 -1.00e+0000 i) error =  1.20e-0043
z#gamma( -2.00e+0000 -5.00e-0001 i) error =  1.24e-0043
z#gamma( -2.00e+0000 -1.00e-0001 i) error =  1.25e-0043
z#gamma( -2.00e+0000 -9.99e-0003 i) error =  1.25e-0043
z#gamma( -2.00e+0000 -1.00e-0004 i) error =  1.25e-0043
z#gamma( -2.00e+0000 -1.00e-0006 i) error =  1.25e-0043
z#gamma( -2.00e+0000 -1.99e-0007 i) error =  1.25e-0043
z#gamma( -2.00e+0000  4.00e+0000 i) error =  6.40e-0044
z#gamma( -1.50e+0000  0.00e-0001 i) error =  3.34e-0041
z#gamma( -5.00e-0001 -5.00e-0001 i) error =  4.29e-0041
z#gamma( -5.00e-0001  0.00e-0001 i) error =  5.55e-0041
z#gamma( -5.00e-0001  5.00e-0001 i) error =  4.29e-0041
z#gamma(  0.00e-0001 -1.50e+0000 i) error =  1.09e-0038
z#gamma(  0.00e-0001 -1.00e+0000 i) error =  1.74e-0038
z#gamma(  0.00e-0001 -5.00e-0001 i) error =  3.59e-0038
z#gamma(  0.00e-0001  5.00e-0001 i) error =  3.59e-0038
z#gamma(  0.00e-0001  1.00e+0000 i) error =  1.74e-0038
z#gamma(  5.00e-0001 -5.00e-0001 i) error =  2.35e-0039
z#gamma(  5.00e-0001  0.00e-0001 i) error =  2.32e-0039
z#gamma(  5.00e-0001  5.00e-0001 i) error =  2.35e-0039
z#gamma(  1.00e+0000  0.00e-0001 i) error =  1.00e-0068
z#gamma(  1.50e+0000  0.00e-0001 i) error =  1.55e-0041
z#gamma(  2.00e+0000  0.00e-0001 i) error =  7.88e-0068
z#gamma(  2.50e+0000  0.00e-0001 i) error =  6.16e-0041
z#gamma(  3.00e+0000 -1.00e+0000 i) error =  1.20e-0042
z#gamma(  3.00e+0000  0.00e-0001 i) error =  6.84e-0067
z#gamma(  4.00e+0000  0.00e-0001 i) error =  6.49e-0066
z#gamma(  5.00e+0000  0.00e-0001 i) error =  6.69e-0065

z#wofz( -2.00e+0000 -2.00e+0000 i) error =  1.98e-0056
z#wofz( -2.00e+0000 -1.50e+0000 i) error =  2.99e-0060
z#wofz( -2.00e+0000 -1.00e+0000 i) error =  2.75e-0057
z#wofz( -2.00e+0000 -5.00e-0001 i) error =  5.05e-0054
z#wofz( -2.00e+0000  0.00e-0001 i) error =  1.00e-0048
z#wofz( -2.00e+0000  5.00e-0001 i) error =  5.05e-0054
z#wofz( -2.00e+0000  1.00e+0000 i) error =  2.75e-0057
z#wofz( -2.00e+0000  1.50e+0000 i) error =  2.99e-0060
z#wofz( -2.00e+0000  2.00e+0000 i) error =  1.98e-0056
z#wofz( -1.50e+0000 -2.00e+0000 i) error =  3.83e-0058
z#wofz( -1.50e+0000 -1.50e+0000 i) error =  1.43e-0059
z#wofz( -1.50e+0000 -1.00e+0000 i) error =  3.12e-0058
z#wofz( -1.50e+0000 -5.00e-0001 i) error =  1.04e-0075
z#wofz( -1.50e+0000  0.00e-0001 i) error =  8.63e-0078
z#wofz( -1.50e+0000  5.00e-0001 i) error =  1.05e-0075
z#wofz( -1.50e+0000  1.00e+0000 i) error =  3.12e-0058
z#wofz( -1.50e+0000  1.50e+0000 i) error =  1.43e-0059
z#wofz( -1.50e+0000  2.00e+0000 i) error =  3.83e-0058
z#wofz( -1.00e+0000 -2.00e+0000 i) error =  2.25e-0057
z#wofz( -1.00e+0000 -1.50e+0000 i) error =  5.82e-0061
z#wofz( -1.00e+0000 -1.00e+0000 i) error =  3.86e-0077
z#wofz( -1.00e+0000 -5.00e-0001 i) error =  9.24e-0076
z#wofz( -1.00e+0000  0.00e-0001 i) error =  4.99e-0071
z#wofz( -1.00e+0000  5.00e-0001 i) error =  9.19e-0076
z#wofz( -1.00e+0000  1.00e+0000 i) error =  5.03e-0077
z#wofz( -1.00e+0000  1.50e+0000 i) error =  5.82e-0061
z#wofz( -1.00e+0000  2.00e+0000 i) error =  2.25e-0057
z#wofz( -5.00e-0001 -2.00e+0000 i) error =  6.34e-0057
z#wofz( -5.00e-0001 -1.50e+0000 i) error =  6.48e-0061
z#wofz( -5.00e-0001 -1.00e+0000 i) error =  0.00e-0001
z#wofz( -5.00e-0001 -5.00e-0001 i) error =  2.21e-0074
z#wofz( -5.00e-0001  0.00e-0001 i) error =  2.26e-0068
z#wofz( -5.00e-0001  5.00e-0001 i) error =  2.21e-0074
z#wofz( -5.00e-0001  1.00e+0000 i) error =  1.38e-0077
z#wofz( -5.00e-0001  1.50e+0000 i) error =  6.48e-0061
z#wofz( -5.00e-0001  2.00e+0000 i) error =  6.34e-0057
z#wofz(  0.00e-0001 -2.00e+0000 i) error =  1.51e-0059
z#wofz(  0.00e-0001 -1.50e+0000 i) error =  6.64e-0061
z#wofz(  0.00e-0001 -1.00e+0000 i) error =  0.00e-0001
z#wofz(  0.00e-0001 -5.00e-0001 i) error =  8.99e-0075
z#wofz(  0.00e-0001  0.00e-0001 i) error =  0.00e-0001
z#wofz(  0.00e-0001  5.00e-0001 i) error =  9.01e-0075
z#wofz(  0.00e-0001  1.00e+0000 i) error =  1.72e-0077
z#wofz(  0.00e-0001  1.50e+0000 i) error =  6.64e-0061
z#wofz(  0.00e-0001  2.00e+0000 i) error =  1.51e-0059
z#wofz(  5.00e-0001 -2.00e+0000 i) error =  6.34e-0057
z#wofz(  5.00e-0001 -1.50e+0000 i) error =  6.48e-0061
z#wofz(  5.00e-0001 -1.00e+0000 i) error =  0.00e-0001
z#wofz(  5.00e-0001 -5.00e-0001 i) error =  2.21e-0074
z#wofz(  5.00e-0001  0.00e-0001 i) error =  2.26e-0068
z#wofz(  5.00e-0001  5.00e-0001 i) error =  2.21e-0074
z#wofz(  5.00e-0001  1.00e+0000 i) error =  1.38e-0077
z#wofz(  5.00e-0001  1.50e+0000 i) error =  6.48e-0061
z#wofz(  5.00e-0001  2.00e+0000 i) error =  6.34e-0057
z#wofz(  1.00e+0000 -2.00e+0000 i) error =  2.25e-0057
z#wofz(  1.00e+0000 -1.50e+0000 i) error =  5.82e-0061
z#wofz(  1.00e+0000 -1.00e+0000 i) error =  3.86e-0077
z#wofz(  1.00e+0000 -5.00e-0001 i) error =  9.24e-0076
z#wofz(  1.00e+0000  0.00e-0001 i) error =  4.99e-0071
z#wofz(  1.00e+0000  5.00e-0001 i) error =  9.19e-0076
z#wofz(  1.00e+0000  1.00e+0000 i) error =  5.03e-0077
z#wofz(  1.00e+0000  1.50e+0000 i) error =  5.82e-0061
z#wofz(  1.00e+0000  2.00e+0000 i) error =  2.25e-0057
z#wofz(  1.50e+0000 -2.00e+0000 i) error =  3.83e-0058
z#wofz(  1.50e+0000 -1.50e+0000 i) error =  1.43e-0059
z#wofz(  1.50e+0000 -1.00e+0000 i) error =  3.12e-0058
z#wofz(  1.50e+0000 -5.00e-0001 i) error =  1.04e-0075
z#wofz(  1.50e+0000  0.00e-0001 i) error =  8.63e-0078
z#wofz(  1.50e+0000  5.00e-0001 i) error =  1.05e-0075
z#wofz(  1.50e+0000  1.00e+0000 i) error =  3.12e-0058
z#wofz(  1.50e+0000  1.50e+0000 i) error =  1.43e-0059
z#wofz(  1.50e+0000  2.00e+0000 i) error =  3.83e-0058
z#wofz(  2.00e+0000 -2.00e+0000 i) error =  1.98e-0056
z#wofz(  2.00e+0000 -1.50e+0000 i) error =  2.99e-0060
z#wofz(  2.00e+0000 -1.00e+0000 i) error =  2.75e-0057
z#wofz(  2.00e+0000 -5.00e-0001 i) error =  5.05e-0054
z#wofz(  2.00e+0000  0.00e-0001 i) error =  1.00e-0048
z#wofz(  2.00e+0000  5.00e-0001 i) error =  5.05e-0054
z#wofz(  2.00e+0000  1.00e+0000 i) error =  2.75e-0057
z#wofz(  2.00e+0000  1.50e+0000 i) error =  2.99e-0060
z#wofz(  2.00e+0000  2.00e+0000 i) error =  1.98e-0056

Back to comp.lang.forth | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

ZGAMMA revisited mhx@iae.nl (Marcel Hendrix) - 2012-01-30 01:05 +0200
  Re: ZGAMMA revisited Krishna Myneni <krishna.myneni@ccreweb.org> - 2012-01-30 05:21 -0800
    Re: ZGAMMA revisited mhx@iae.nl (Marcel Hendrix) - 2012-01-31 00:21 +0200
      Re: ZGAMMA revisited mhx@iae.nl (Marcel Hendrix) - 2012-02-04 22:11 +0200
        Re: ZGAMMA revisited Krishna Myneni <krishna.myneni@ccreweb.org> - 2012-02-05 08:01 -0800

csiph-web