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 AAA16462; Tue, 10 Dec 2002 00:24:23 +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 AAA16217 for ; Tue, 10 Dec 2002 00:24:22 +0100 (MET) Received: from postfix2-2.free.fr (postfix2-2.free.fr [213.228.0.140]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id gB9NOM110326 for ; Tue, 10 Dec 2002 00:24:22 +0100 (MET) Received: from imp1-1.pro.proxad.net (imp1-1.pro.proxad.net [212.27.35.86]) by postfix2-2.free.fr (Postfix) with ESMTP id F18775F9C3 for ; Tue, 10 Dec 2002 00:04:20 +0100 (CET) Received: by imp1-1.pro.proxad.net (Postfix, from userid 33) id CE860780BA; Tue, 10 Dec 2002 00:04:20 +0100 (MET) To: caml-list@inria.fr Subject: [Caml-list] float pretty-printing precision, once more. Message-ID: <1039475060.3df52174c32a4@imp.pro.proxad.net> Date: Tue, 10 Dec 2002 00:04:20 +0100 (MET) From: jeanmarc.eber@lexifi.com MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit User-Agent: IMP/PHP IMAP webmail program 2.2.42 X-Originating-IP: 81.48.97.57 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk 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