Browse thread
[Caml-list] float pretty-printing precision, once more.
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Yaron M. Minsky <yminsky@C...> |
| Subject: | Re: [Caml-list] float pretty-printing precision, once more. |
I'm no expert on floating point representations either, but sprintf with a sufficiently long length seems to work. # let test x = float_of_string (sprintf "%.30e" x) = x;; val test : float -> bool = <fun> # test (sqrt 2.);; - : bool = true # test (sqrt 2. *. 1.343e26);; - : bool = true y On Mon, 2002-12-09 at 18:04, 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 = <a float text representation> > > 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