PATCH (FIXME): flacosh and flasinh Bradley Lucier (21 Feb 2020 21:12 UTC)
|
Re: PATCH (FIXME): flacosh and flasinh
Arthur A. Gleckler
(21 Feb 2020 21:23 UTC)
|
Re: PATCH (FIXME): flacosh and flasinh
Bradley Lucier
(21 Feb 2020 21:26 UTC)
|
Re: PATCH (FIXME): flacosh and flasinh
Arthur A. Gleckler
(21 Feb 2020 21:35 UTC)
|
Re: PATCH (FIXME): flacosh and flasinh
John Cowan
(21 Feb 2020 23:10 UTC)
|
Re: PATCH (FIXME): flacosh and flasinh
Arthur A. Gleckler
(21 Feb 2020 23:21 UTC)
|
Re: PATCH (FIXME): flacosh and flasinh
Arthur A. Gleckler
(26 Feb 2020 18:33 UTC)
|
Re: PATCH (FIXME): flacosh and flasinh
William D Clinger
(05 Mar 2020 23:45 UTC)
|
Re: PATCH (FIXME): flacosh and flasinh
Arthur A. Gleckler
(05 Mar 2020 23:46 UTC)
|
This came up for Gambit on a specific platform (cough, *Windows*, cough), so I thought that I'd look at it in SRFI 144. SRFI 144 now has a pretty good log1+, so I thought I could use it here. I started with code that gave different results from what's used in Ubuntu (from fdlibm, I believe), so I used my computable reals package to test the accuracy of my code and the built-in functions. When the built-in acosh and asinh proved more accurate, I fiddled over a number of days. There are only a few things to try, and I think now I have probably reverse-engineered the fdlibm code. At least, the built-in functions and these functions have the same mean absolute error, RMS error, and maximum error over the range and random values I tested. I tested this with ~/programs/larceny-0.99-bin-native-ia32-linux86/larceny --path . --r7rs --program tests/scheme/run/flonum.sps and got the following errors, which seem to be unrelated to acosh and asinh: =========================================================== heine:~/programs/srfi-144> ~/programs/larceny-0.99-bin-native-ia32-linux86/larceny --path . --r7rs --program tests/scheme/run/flonum.sps Trying /home/lucier/programs/srfi-144/srfi/144.constants.scm Reading /home/lucier/programs/srfi-144/srfi/144.constants.scm Trying /home/lucier/programs/srfi-144/srfi/144.body0.scm Reading /home/lucier/programs/srfi-144/srfi/144.body0.scm Trying /home/lucier/programs/srfi-144/srfi/144.body.scm Reading /home/lucier/programs/srfi-144/srfi/144.body.scm Trying /home/lucier/programs/srfi-144/srfi/144.special.scm Reading /home/lucier/programs/srfi-144/srfi/144.special.scm Trying /home/lucier/programs/srfi-144/srfi/144.ffi.scm Reading /home/lucier/programs/srfi-144/srfi/144.ffi.scm Running tests for (scheme flonum) 19 tests failed: Expression: (fladjacent (fl- fl-least) posinf) Result: 0.0 Expected: -0.0 Expression: (fladjacent (fl- fl-least) one) Result: 0.0 Expected: -0.0 Expression: (test-flnormalized-fraction-exponent fl-least) Result: (#t #t #t #t #f) Expected: (#t #t #t #t #t) Expression: (test-flnormalized-fraction-exponent (fl- fl-least)) Result: (#t #t #t #t #f) Expected: (#t #t #t #t #t) Expression: (flnan? (fl+* zero posinf one)) Result: &error Expected: #t Expression: (flnan? (fl+* zero neginf one)) Result: &error Expected: #t Expression: (flnan? (fl+* posinf zero one)) Result: &error Expected: #t Expression: (flnan? (fl+* neginf zero one)) Result: &error Expected: #t Expression: (flnan? (fl+* zero posinf nan)) Result: &error Expected: #t Expression: (flnan? (fl+* zero neginf nan)) Result: &error Expected: #t Expression: (flnan? (fl+* posinf zero nan)) Result: &error Expected: #t Expression: (flnan? (fl+* neginf zero nan)) Result: &error Expected: #t Expression: (fl+* fl-greatest fl-greatest neginf) Result: &error Expected: -inf.0 Expression: (fl+* fl-greatest (fl- fl-greatest) posinf) Result: &error Expected: +inf.0 Expression: (flnan? (fl+* nan one one)) Result: &error Expected: #t Expression: (flnan? (fl+* one nan one)) Result: &error Expected: #t Expression: (flnan? (fl+* one one nan)) Result: &error Expected: #t Expression: (flabs negzero) Result: -0.0 Expected: 0.0 Expression: (flhypot (fl/ fl-greatest two) (fl/ fl-greatest two)) Result: approximately 1.2711610061536462e308 Expected: approximately 1.271161006153646e308 19 of 1276 tests failed. =========================================================== This fixes at least one FIXME (in flasinh) and should be more accurate for flacosh, too. Here's the patch. I tested fairly extensively on my own. Brad