Tests and alternate definitions of lg and exn. Bradley Lucier (12 Jul 2020 19:31 UTC)
Re: Tests and alternate definitions of lg and exn. Arvydas Silanskas (12 Jul 2020 20:35 UTC)
Re: Tests and alternate definitions of lg and exn. Bradley Lucier (12 Jul 2020 20:42 UTC)
Re: Tests and alternate definitions of lg and exn. Arthur A. Gleckler (12 Jul 2020 21:53 UTC)
Re: Tests and alternate definitions of lg and exn. Bradley Lucier (12 Jul 2020 22:52 UTC)
SRFI development in the age of git John Cowan (12 Jul 2020 23:15 UTC)
Re: SRFI development in the age of git Bradley Lucier (12 Jul 2020 23:54 UTC)
Re: SRFI development in the age of git Arthur A. Gleckler (13 Jul 2020 00:32 UTC)
Re: SRFI development in the age of git Arthur A. Gleckler (13 Jul 2020 00:30 UTC)
Re: SRFI development in the age of git Arthur A. Gleckler (13 Jul 2020 01:35 UTC)
Re: SRFI development in the age of git Marc Nieper-Wißkirchen (13 Jul 2020 06:45 UTC)
Re: SRFI development in the age of git Linas Vepstas (13 Jul 2020 07:05 UTC)
Re: SRFI development in the age of git Marc Nieper-Wißkirchen (13 Jul 2020 07:09 UTC)
Re: SRFI development in the age of git Linas Vepstas (13 Jul 2020 07:34 UTC)
Re: SRFI development in the age of git John Cowan (13 Jul 2020 18:10 UTC)
Re: SRFI development in the age of git Linas Vepstas (13 Jul 2020 21:40 UTC)
Re: SRFI development in the age of git John Cowan (14 Jul 2020 00:38 UTC)
Re: SRFI development in the age of git Marc Nieper-Wißkirchen (14 Jul 2020 09:59 UTC)
Re: SRFI development in the age of git Linas Vepstas (14 Jul 2020 22:54 UTC)
Re: SRFI development in the age of git John Cowan (14 Jul 2020 23:12 UTC)
Re: SRFI development in the age of git Linas Vepstas (14 Jul 2020 23:57 UTC)
Re: SRFI development in the age of git John Cowan (15 Jul 2020 03:52 UTC)
Re: SRFI development in the age of git Linas Vepstas (15 Jul 2020 08:34 UTC)
Re: SRFI development in the age of git Arthur A. Gleckler (13 Jul 2020 07:40 UTC)
Re: SRFI development in the age of git Marc Nieper-Wißkirchen (13 Jul 2020 07:46 UTC)
Re: SRFI development in the age of git Arthur A. Gleckler (13 Jul 2020 15:59 UTC)
Re: Tests and alternate definitions of lg and exn. Linas Vepstas (13 Jul 2020 08:00 UTC)

Tests and alternate definitions of lg and exn. Bradley Lucier 12 Jul 2020 19:30 UTC

There now seem to be four active github repositories and I can't tell
what I should look at to test.  It's confusing.

I just spent an hour comparing these two definitions (which I found in
one of the repositories somewhere, and which I thought were current):

(define (exn lg)
   (define (trm n u lg) (* lg (+ 1 (/ (* 1ms u) n))))
   (trm 2 (trm 3 (trm 4 1 lg) lg) lg))

(define (lg y)
   (define yms (* y 1ms))
   (define (trm n u r) (- (/ 1 n) (* u r)))
   (* y (trm 1 yms (trm 2 yms (trm 3 yms (trm 4 yms 0))))))

to

(define (exn2 lg)
   (/ (flexp-1 (* 1ms lg)) 1ms))

(define (lg2 y)
   (/ (fllog1+ (* y 1ms)) 1ms))

using flexp-1 and fllog1+ from SRFI 144.

The test had

(define s (+ 1. (/ 300)))

(define 1ms (- 1. s))

and the argument ranges 0..1 and 0..10.

With 100 random arguments between 0 and 1, the errors were

srfi-194-lg    samples= 100 max-error-exact= 2.4120156483630522e-11
max-error-exact-arg= .9938914540059453 max-error-double=
2.412011003270222e-11 max-error-double-arg= .9938914540059453
RMS-error-exact= 9.26188658779087e-12 RMS-error-double=
9.261889084258697e-12
srfi-144-lg    samples= 100 max-error-exact= 2.8631583467959265e-16
max-error-exact-arg= .8162050798467028 max-error-double=
2.968540443309035e-16 max-error-double-arg= .747060807279462
RMS-error-exact= 1.006292573961332e-16 RMS-error-double=
1.0743385538886467e-16
srfi-194-exn   samples= 100 max-error-exact= 2.2907460366860719e-10
max-error-exact-arg= .6693165861577378 max-error-double=
2.2907455638360778e-10 max-error-double-arg= .6693165861577378
RMS-error-exact= 1.4585244601511403e-10 RMS-error-double=
1.4585244661242198e-10
srfi-144-exn   samples= 100 max-error-exact= 2.541209861688772e-16
max-error-exact-arg= .17363812148494864 max-error-double=
3.19787020611924e-16 max-error-double-arg= .17363812148494864
RMS-error-exact= 8.649187030413897e-17 RMS-error-double=
1.0121258400120375e-16

max-error-exact: The maximum relative error between the computed result
and the true result

max-error-exact-arg: The argument for which this error was attained

max-error-double: The maximum relative error between the computed result
and the exact result rounded to the nearest double

max-error-double-arg: The argument for which this error was attained

RMS-error-exact: The root-mean-square relative error comparing with the
exact results

RMS-error-double: The root-mean-square relative error comparing with the
exact result rounded to the nearest double.

With 100 random arguments between 0 and 10, the errors were:

srfi-194-lg    samples= 100 max-error-exact= 2.43654288848215e-7
max-error-exact-arg= 9.938914540059452 max-error-double=
2.4365428893560356e-7 max-error-double-arg= 9.938914540059452
RMS-error-exact= 9.347325630743659e-8 RMS-error-double=
9.347325631641298e-8
srfi-144-lg    samples= 100 max-error-exact= 2.4161776587142494e-16
max-error-exact-arg= 6.496204559507443 max-error-double=
2.70473939316792e-16 max-error-double-arg= 6.496204559507443
RMS-error-exact= 9.859988888510362e-17 RMS-error-double=
1.0280475565778006e-16
srfi-194-exn   samples= 100 max-error-exact= 1.3861092173990686e-6
max-error-exact-arg= 9.964086369734716 max-error-double=
1.3861092174439402e-6 max-error-double-arg= 9.964086369734716
RMS-error-exact= 5.738343244244537e-7 RMS-error-double=
5.738343244254292e-7
srfi-144-exn   samples= 100 max-error-exact= 2.2955756055570096e-16
max-error-exact-arg= 2.786427743168774 max-error-double=
2.1586819406506796e-16 max-error-double-arg= 8.343860682920326
RMS-error-exact= 8.662566055193718e-17 RMS-error-double=
9.942145881356304e-17

I don't know whether you want to rely on SRFI-144, but it appears that
the error is greater with the current definitions and it would be a good
idea to use

(define (exn2 lg)
   (/ (flexp-1 (* 1ms lg)) 1ms))

(define (lg2 y)
   (/ (fllog1+ (* y 1ms)) 1ms))

as definitions, relying on fllog1+ and flexp-1 from SRFI 144.

Now that I have the test code, it is easy for me to test alternate
implementations of exn and lg if I didn't test the right definition here.

Brad