On 10/14/2013 12:15 AM, Konrad Hinsen wrote:
Neil Toronto writes:
> > So how about Racket? Can a programmer rely on a given program producing
> > the exact same result on all platforms, and with any Racket version?
>
> In almost everything, PLT and Racket prioritize correctness over speed.
That sounds interesting. Why doesn't the Racket marketing department
do more advertising for this? It's pretty hard to find a language that
is both usable in real life and aims for correctness in float
operations.
What marketing department? :D
I'm planning to demo some of this stuff at Strange Loop next year.
> If you want to test Racket's compliance on your system, run this:
>
> #lang racket
> (require math/utils)
> (test-floating-point 10000)
>
> If it returns '(), your system is either compliant or close to it.
The bad news is that MacOS X is not very compliant. I get a list that's
far from empty:
'(((flexpt -1.4916681462400412e-154 -1.0) 1.0)
((flexpt 1.4916681462400412e-154 -1.0) 1.0)
((flexpt -1.3407807929942596e+154 -1.0) 1.0)
((flexpt 1.3407807929942596e+154 -1.0) 1.0)
((flsin -10.0) 1.0)
((flsin 10.0) 1.0)
...
((flatan 10.0) 1.0)
((fl2log 8.537625565374698e+146 -4.512338244767214e+130) 17179869183.907547)
((fl2log1p 2.0398056943905264e+255 5.292226095768373e+238)
549755813887.9563))
It's always an error of 1.0 ulps, except for logarithms where the
error is much more important.
Those are double-double (~105-bit) log functions. If you didn't see
anything that looked like ((fllog x) e) where e > 1.0, your system's
floating-point log is probably okay.
Do you get `fl2log' and `fl2log1p' errors like that with the JIT turned
off? Are you running on HEAD? Matthew recently fixed a JIT error that
was making `beta-inc' randomly fail; this could be another manifestation.
If it's not the JIT, can you zip and send to me (off-list) the output
for (test-floating-point 50000)? I'd like to try to spot some trends.
Neil ⊥
____________________
Racket Users list:
http://lists.racket-lang.org/users