<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Feb 8, 2013 at 7:53 PM, Tobias Hammer <span dir="ltr">&lt;<a href="mailto:tobias.hammer@dlr.de" target="_blank">tobias.hammer@dlr.de</a>&gt;</span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Tested it too and got an interesting result. On a 32bit linux its:<br>
<br>
+nan.0<br>
+nan.0<br>
+nan.0<br>
+nan.0<br>
+nan.0<br>
+nan.0<br>
+nan.0<br>
+nan.0<br></blockquote><div><br></div><div>That&#39;s what I get too.<br>And indeed my other machine was a 64bits Ubuntu and Racket.<br><br></div><div>Laurent<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<br>
so, completely wrong. But on a 64bit Linux its correct if i use the 64bit<br>
racket version. When i try the 32bit build i get the wrong results again.<br>
I think you can blame it on 32 implementation of racket/libc/compiler or<br>
whatever. Not on the actual cpu in use because the hardware was always the<br>
same (2 identical computers, identical OS + version, only 32bit in one, 64<br>
in the other).<br>
<br>
Tobias<br>
<br>
<br>
<br>
On Fri, 08 Feb 2013 19:07:53 +0100, Neil Toronto &lt;<a href="mailto:neil.toronto@gmail.com" target="_blank">neil.toronto@gmail.com</a>&gt;<br>
wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>
Back on list.<br>
<br>
A lot of things point to general sloppiness in either the FPU or C libraries, but I&#39;d like more information just in case. Can you reply with the values of the following expressions on the Athlon?<br>
<br>
   (flexpt -1001.0 -1.3407807929942596e+154)<br>
   (flexpt -1001.0 1.3407807929942596e+154)<br>
   (flexpt -0.1 -1.3407807929942596e+154)<br>
   (flexpt -0.1 1.3407807929942596e+154)<br>
   (flexpt -744.4400719213812 -1.3407807929942596e+154)<br>
   (flexpt -744.4400719213812 1.3407807929942596e+154)<br>
   (flexpt -1.0 -1.3407807929942596e+154)<br>
   (flexpt -1.0 1.3407807929942596e+154)<br>
<br>
You should get these values:<br>
<br>
   0.0 +inf.0 +inf.0 0.0 0.0 +inf.0 1.0 1.0<br>
<br>
I think these are cases Racket handles specially instead of handing off to C&#39;s `pow&#39; on platforms where we know `pow&#39; handles them wrongly. We might need to ask Matthew to expand that set of platforms.<br>
<br>
Small rounding errors like this:<br>
<br>
   ((fl*/error -6.87181640380727e-156 2.3341566035927725e-153)<br>
    0.7079979032237692)<br>
<br>
which are only 1 bit off, are probably the cause of these errors:<br>
<br>
   ((fl2log 1.5124390004859715e-308 0.0) 4294967296.220986)<br>
   ((fl2log1p 3.799205740343036e+246 1.4492752004468653e+230)<br>
    549755813887.9473))<br>
<br>
`fl2log&#39; and `fl2log1p&#39; are 103-ish-bit logarithm implementations used in certain tricky subdomains of a few special functions. They assume arithmetic is always correct and are very sensitive to rounding errors. You&#39;re getting about 65-bit output precision for certain inputs. We can almost certainly blame the FPU because IEEE 754 requires arithmetic to be implemented and correctly rounded.<br>



<br>
IEEE 754 only *recommends* typical irrational functions. When they&#39;re not implemented in hardware, C libraries compute them in software. So I don&#39;t know whether these and others are the FPU&#39;s or C library&#39;s fault:<br>



<br>
   ((flsin 2.5489254492488616e+52) 22637349860729424.0)<br>
   ((flcos 3.91520018229574e+49) 6369061509154398.0)<br>
   ((fltan 1.6614020610450763e+21) 9158003261155244.0)<br>
   ((flexp 16.938769136983012) 7.0)<br>
   ((flexp 282.52374429474406) 102.0)<br>
   ((flexp -10.0) 4.0)<br>
   ((flexp -708.3964185322641) 124.0)<br>
<br>
These errors come from not doing argument reductions carefully enough. The trigonometric functions probably don&#39;t compute x % 2*pi using a high-precision 2*pi when x is large. They seem to be correct enough when x is small, though.<br>



<br>
The exponential function wasn&#39;t tested well at the boundaries of its domain:<br>
<br>
   ((flexp 709.782712893384) +inf.0)<br>
<br>
709.782712893384 is (fllog +max.0), and (flexp (fllog +max.0)) should be near +max.0, not (as I suspect) +inf.0.<br>
<br>
I don&#39;t know whether Racket should do anything about these errors. I don&#39;t think it would be too hard to do something like Java&#39;s StrictMath, but it would take time.<br>
<br>
In the meantime, don&#39;t use the Athlon for serious numerical computation.<br>
<br>
Neil ⊥<br>
<br>
On 02/08/2013 12:13 AM, Laurent wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Neil,<br>
<br>
Interaction in a terminal is attached, using Racket 5.3.2.3.<br>
<br>
Some details about my machine:<br>
Linux 3.2.0-37-generic-pae #58-Ubuntu SMP Thu Jan 24 15:51:02 UTC 2013<br>
i686 athlon i386 GNU/Linux<br>
<br>
In particular, I use a 32bits Ubuntu 12.04.2 on a 686 processor, if<br>
that&#39;s of any interest.<br>
<br>
Cheers,<br>
Laurent<br>
<br>
<br>
<br>
<br>
On Fri, Feb 8, 2013 at 1:15 AM, Neil Toronto &lt;<a href="mailto:neil.toronto@gmail.com" target="_blank">neil.toronto@gmail.com</a><br>
&lt;mailto:<a href="mailto:neil.toronto@gmail.com" target="_blank">neil.toronto@gmail.com</a><u></u>&gt;&gt; wrote:<br>
<br>
    On 02/07/2013 12:09 PM, Laurent wrote:<br>
<br>
        On Thu, Feb 7, 2013 at 5:50 PM, Neil Toronto<br>
        &lt;<a href="mailto:neil.toronto@gmail.com" target="_blank">neil.toronto@gmail.com</a> &lt;mailto:<a href="mailto:neil.toronto@gmail.com" target="_blank">neil.toronto@gmail.com</a><u></u>&gt;<br>
        &lt;mailto:<a href="mailto:neil.toronto@gmail.com" target="_blank">neil.toronto@gmail.com</a><br>
        &lt;mailto:<a href="mailto:neil.toronto@gmail.com" target="_blank">neil.toronto@gmail.com</a><u></u>&gt;__&gt;&gt; wrote:<br>
<br>
             Today is not that day, but thanks for asking about this<br>
        anyway. :)<br>
<br>
<br>
        On one machine with Ubuntu 12.10, I get no error, but on another<br>
        machine<br>
        with Ubuntu 12.04, I get more than 14000 errors, many of them being<br>
        +inf.0 and other numbers with big exponents (is my machine<br>
        really that<br>
        bad?).<br>
        Is this exactly the kind of reply you want to avoid for now or<br>
        are you<br>
        interested in a report?<br>
<br>
<br>
    Alrighty, you&#39;ve piqued my interest. Better send it off-list, though. :)<br>
<br>
    Neil ⊥<br>
</blockquote>
<br></div></div><div>
_________________________<br>
  Racket Developers list:<br>
  <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/<u></u>dev</a><br>
</div></blockquote><span><font color="#888888">
<br>
<br>
-- <br>
------------------------------<u></u>---------------------------<br>
Tobias Hammer<br>
DLR / Institute of Robotics and Mechatronics<br>
Muenchner Str. 20, D-82234 Wessling<br>
Tel.: 08153/28-1487<br>
Mail: <a href="mailto:tobias.hammer@dlr.de" target="_blank">tobias.hammer@dlr.de</a></font></span><div><div><br>
<br>
_________________________<br>
 Racket Developers list:<br>
 <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/<u></u>dev</a><br>
</div></div></blockquote></div><br></div></div>