On 04/27/2014 05:14 PM, mfl...@racket-lang.org wrote:
~~~~~~~~~~ d682c94 Matthew Flatt <mfl...@racket-lang.org> 2014-04-27 13:58 : | repairs to precision of `exact->inexact` et al. | | Thanks to Neil T.! : M racket/src/racket/src/numarith.c | 28 ++++++-- M racket/src/racket/src/ratfloat.inc | 74 +++++++++++++++----- M racket/src/racket/src/rational.c | 11 +++ M racket/src/racket/src/schpriv.h | 2 + M .../racket-test/tests/racket/number.rktl | 53 ++++++++++++++ ~~~~~~~~~~ 04c4538 Matthew Flatt <mfl...@racket-lang.org> 2014-04-27 15:17 : | speed up `inexact->exact` | | Parse IEEE floating-point numbers directly. | | Thanks to Neil T.! : M racket/src/racket/sconfig.h | 3 + M racket/src/racket/src/numstr.c | 177 ++++++++++++------- M racket/src/racket/src/ratfloat.inc | 73 +++++++- M racket/src/racket/src/rational.c | 18 +- M racket/src/racket/src/schpriv.h | 2 + M .../racket-test/tests/racket/number.rktl | 33 +++-
Thanks for translating these into C so quickly! My plane-line intersection test cases run about twice as fast now, and because `exact->inexact` is correctly rounded, I can set the error reporting threshold to 0.5 ulps.
Strange thing, though: while `inexact->exact` is now about 10x faster, my TR implementation `flonum->rational` is now about 7x slower. I've verified that `flonum->fields` accounts for about 85% of the running time. I see that you've changed `integer-bytes->integer`, which `flonum->fields` uses. Could it have been a pessimization on certain platforms?
Neil ⊥ _________________________ Racket Developers list: http://lists.racket-lang.org/dev