From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id BAA17388; Tue, 10 Dec 2002 01:00:02 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id BAA17794 for ; Tue, 10 Dec 2002 01:00:01 +0100 (MET) Received: from epexch01.qlogic.org ([63.170.40.3]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id gBA000111153 for ; Tue, 10 Dec 2002 01:00:01 +0100 (MET) Received: from epmailtmp.qlogic.org ([10.20.33.254]) by epexch01.qlogic.org with Microsoft SMTPSVC(5.0.2195.5329); Mon, 9 Dec 2002 17:59:02 -0600 Received: from [10.20.33.146] ([10.20.33.146]) by epmailtmp.qlogic.org with Microsoft SMTPSVC(5.0.2195.4905); Mon, 9 Dec 2002 17:59:02 -0600 Date: Mon, 9 Dec 2002 18:07:25 -0600 (CST) From: Brian Hurt X-X-Sender: Reply-To: Brian Hurt To: cc: Subject: Re: [Caml-list] float pretty-printing precision, once more. In-Reply-To: <1039475060.3df52174c32a4@imp.pro.proxad.net> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-OriginalArrivalTime: 09 Dec 2002 23:59:02.0213 (UTC) FILETIME=[F2A32750:01C29FDE] Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk This looks just like rounding error to me. I note that the string output has only 12 signifigant digits- and the error is, coincidentally enough, right about f * 10e-12. But then, I'm not an expert in IEEE FP either... Brian On Tue, 10 Dec 2002 jeanmarc.eber@lexifi.com wrote: > caml 3.06+1: > > # let f = 1. /. 86400.;; > val f : float = 1.15740740741e-05 > # let s = string_of_float f;; > val s : string = "1.15740740741e-05" > # let f1 = float_of_string s;; > val f1 : float = 1.15740740741e-05 > # f1 = f;; > - : bool = false > # f1 -. f;; > - : float = 2.59259844496e-17 > > This situation may be understandable, but is unfortunate. > > Disclaimer: I'm not a specialist of the IEEE float format. > > Do I have at hand, at least on an architecture supporting the IEEE format, a > function that pretty-prints any valid float value (by valid I mean that I > exclude the "special" values like NaN, infinity, etc.) so that > float_of_string applied to the resulting string returns my initial value, > or, at least, a value that, if substracted from my initial one, returns > zero ? > > Background: > > In fact, my question goes a little bit further, as it concerns indeed the > parsing of floats in the caml compiler (that uses internally float_of_string > if I'm correct). > > Suppose you calculate somewhere (with an caml program, say) a float > constant (such a calculation may last for hours!), and you want after > obtaining the result to *generate* a caml source using this calculated > value. You will probably generate something like > > let my_const = > > But my example shows that you are loosing precision and accuracy if you > just use string_of_float. > > Of course the goal is to incorporate this value in a caml source, not > to read it in binary form from a file (that would be easy!). > > Do anybody know a solution to my problem ? > > Jean-Marc Eber > > ------------------- > To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr > Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners