Thanks Frederic. I will relax the condition for now as I don't know practical use for such need yet. On Tue, 1 Aug 2017 at 12:25, Frédéric Bour wrote: > The Doubledouble[1] module from my grenier library implements 106-bit > precision floating point. See > https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format#Double-double_arithmetic > for more information. > > But this is not a serious solution, if you want to preserve json numbers > then you should represent them more or less literally (up to what you > consider "worth" preserving), not by encoding them as IEEE 754 double. > > [1]: > https://github.com/let-def/grenier/blob/master/doubledouble/doubledouble.mli > > On 01/08/2017 13:18, Nicolás Ojeda Bär wrote: > > Dear Viet, > > I am not sure this is an issue with OCaml (as you can verify using your > favourite C compiler). Rather, I think IEEE 754 double-precision binary > floating-point numbers can only represent numbers between 10^{-308} and > 10^308 with full decimal digits precision. Numbers smaller than that can > only be represented with reduced precision. > > Best wishes, > Nicolas > > On Tue, Aug 1, 2017 at 12:47 PM, Viet Le wrote: > >> Hi all, >> >> I'm writing a JSON parser in pure OCaml and have encountered an issue >> with small float values: >> >> 10 zeros in between >> # 1.00000000001e-312 ;; >> - : float = 1.00000000001e-312 >> >> 11 zeros in between >> # 1.000000000001e-312 ;; >> - : float = 1.00000000000341e-312 >> >> # 5e-324 ;; >> - : float = 4.94065645841e-324 >> >> >> I haven't found precise limit, but as a rule of thumb (*not precise*), >> for a positive float value to keep its precision, it *should* not be >> smaller than 1.00000000001e-312. To use JSON as precise serializer, it >> would be necessary to preserve accuracy. >> >> I checked https://github.com/ocaml/Zarith and it supports only big int & >> quotients, not floating point. >> >> For values smaller than the limit above, should I just treat as 2 values: >> (normalized: float, exponent: float), so we will have: >> >> 5e-324 -> (5, -324) >> >> Comments and suggestions are appreciated. Thanks. >> >> -- >> Kind regards, >> Viet >> > > > -- Kind regards, Viet