Date: Mon, 8 Mar 1999 22:24:39 -0500 (EST)
From: mahamud@cs.cmu.edu
To: Xavier Leroy <Xavier.Leroy@inria.fr>, caml-list@inria.fr
Subject: Re: bug in floating point implementation ?
In-Reply-To: <19990225131027.37364@pauillac.inria.fr>
<19990225131027.37364@pauillac.inria.fr>
>>>>> "Xavier" == Xavier Leroy <Xavier.Leroy@inria.fr> writes:
Xavier> The Intel x86 has an interesting quirk: it computes
Xavier> internally in extended precision (80 bits), and rounds to
Xavier> double precision (64 bits) only when storing a result in
Xavier> memory. This means that in a piece of code such as
Xavier> let x = a * b + c
Xavier> the virtual machine will compute a * b, round it (by
Xavier> storing it in memory), add c, and round the result. While
Xavier> the native-code compiler will compute a * b, keep the
Xavier> result in extended precision in the top float register,
Xavier> then add c, then round the result.
Xavier> In extreme cases (badly conditioned algorithm, computation
Xavier> of errors), you may thus get different results.
sorry about the late reply. but i was hung up with other stuff.
thanx for the explanation. i've found out that indeed my computation
was ill-conditioned and have fixed it now.
in fact, were it not for this intel quirkiness, i might have
overlooked the bug for some-time. this definitely tops my
list of ways i've debugged code!
before i was able to spot the problem with my code, i tried
downloading the src on a different architecture. however, it
seems that the tar file is broken, since it creates files when it should
be creating dirs. i never faced this problem for my linux box since
i downloaded the binary rpms. anyway it does'nt matter for now since
i know what the problem is. but in future it might be useful to
compile ocaml on a different architecture (i had tried both 2.01 &
2.02).
- shyjan
carnegie mellon university
This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:20 MET