
#9534: IEEE Standard 754 for Binary Floating-Point Arithmetic by Prof. W. Kahan, UCB -------------------------------------+------------------------------------- Reporter: jrp | Owner: Type: task | Status: new Priority: normal | Milestone: Component: Test Suite | Version: 7.8.3 Keywords: IEEE754 | Operating System: Architecture: Unknown/Multiple | Unknown/Multiple Difficulty: Moderate (less | Type of failure: Incorrect than a day) | result at runtime Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- The attached is an implementation of the floating point accuracy test described in ''The Baleful Influence of Benchmarks'' section of http://www.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF {{{ Results for Float: r = 4098.0 produces 12.0 and 12.0 sig. bits r = 4098.25 fails: root 0.99989897 isn't at least 1 <<<< r = 4097.004 produces 12.0 and 11.999298 sig. bits : Worst accuracy is 11.999298 sig. bits : Results for Double: r = 4098.0 produces Infinity and Infinity sig. bits r = 4098.25 produces Infinity and 53.0 sig. bits r = 4097.00390625 produces Infinity and 53.451178091541244 sig. bits r = 1.6777218e7 produces Infinity and Infinity sig. bits r = 1.677721825e7 produces Infinity and 75.0 sig. bits r = 1.6777219e7 produces Infinity and 71.0 sig. bits r = 9.4906267e7 produces 26.499999994288153 and 26.499999986733027 sig. bits r = 9.490626725e7 fails: root 0.999999995635551 isn't at least 1 <<< r = 2.684354505e8 produces 28.0 and 27.999999919383132 sig. bits r = 2.684354515e8 produces 28.0 and 27.99999993013205 sig. bits r = 2.68435458e8 produces 28.0 and 28.0 sig. bits r = 2.6843545825e8 produces 28.0 and 28.00000000268723 sig. bits r = 2.6843545700000006e8 produces 28.0 and 27.999999989251084 sig. bits r = 4.294967298e9 produces 32.0 and 32.0 sig. bits r = 4.29496729825e9 produces 32.0 and 32.00000000016795 sig. bits Worst accuracy is 26.499999986733027 sig. bits }}} This seems to be comparable to a clang version, but seems to be fairly poor in comparison to some other machines, back in the day (1997). '''The attached could, possibly be turned into a testsuite test, by removing the QuickCheck tests that are included.''' Observations: * There are a couple of failures (could be the implementation of sqrt or log). * signum seems incorrect (signum Nan = -1.0) * The prelude should have a copysign function * min fails to produce the other argument if one argument is NaN * The CFloat and CDouble variants seem to produce the same result as the native Float and Double versions * The Haskell coding style could be improved to remove some boilerplate, make the code more idiomatic * There may be a better way of entering the test values of r to ensure that they are accurate -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9534 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler