From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 5F7377F98F for ; Tue, 1 Aug 2017 14:12:08 +0200 (CEST) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=daniel.buenzli@erratique.ch; spf=None smtp.mailfrom=daniel.buenzli@erratique.ch; spf=None smtp.helo=postmaster@smtp.webfaction.com Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of daniel.buenzli@erratique.ch) identity=pra; client-ip=31.170.123.134; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="daniel.buenzli@erratique.ch"; x-sender="daniel.buenzli@erratique.ch"; x-conformance=sidf_compatible Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of daniel.buenzli@erratique.ch) identity=mailfrom; client-ip=31.170.123.134; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="daniel.buenzli@erratique.ch"; x-sender="daniel.buenzli@erratique.ch"; x-conformance=sidf_compatible Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@smtp.webfaction.com) identity=helo; client-ip=31.170.123.134; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="daniel.buenzli@erratique.ch"; x-sender="postmaster@smtp.webfaction.com"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3AHakOUxK3PKZ8GTgb29mcpTZWNBhigK39O0sv0rFi?= =?us-ascii?q?tYgeLfTxwZ3uMQTl6Ol3ixeRBMOAuqIC07KempujcFRI2YyGvnEGfc4EfD4+ou?= =?us-ascii?q?JSoTYdBtWYA1bwNv/gYn9yNs1DUFh44yPzahANS47xaFLIv3K98yMZFAnhOgpp?= =?us-ascii?q?POT1HZPZg9iq2+yo9ZDeZwZFiCChbb9uMR67sRjfus4KjIV4N60/0AHJonxGe+?= =?us-ascii?q?RXwWNnO1eelAvi68mz4ZBu7T1et+ou+MBcX6r6eb84TaFDAzQ9L281/szrugLd?= =?us-ascii?q?QgaJ+3ART38ZkhtMAwjC8RH6QpL8uTb0u+ZhxCWXO9D9QLYpUjqg8qhrUgflhi?= =?us-ascii?q?kHOTAn82/YiMJwgr9crh2uuxNxzJPbbZqJNPpnZK7RYckXSXZDU8tXSidPApm8?= =?us-ascii?q?b4wKD+cZM+hXtY/9p1oQohu6HQahGf/3yjlJh3/y3K0xzuMsHhzc0wwmHtIBrn?= =?us-ascii?q?DUoM/uO6cPT++1yqjJzTHCb/5Nxzj98pLIfQo9ofGNRLJwbNTexVMzGAPFl1id?= =?us-ascii?q?r5HuMT2S1uQIqWeb7uxgWPqxhG49sQF+uCSvxsY1ionUmI0Z0EzL9SVhzIY6JN?= =?us-ascii?q?24VE57YcO/H5dKqy6aMI52TtsjQ252pCY6xKcKuZmhfCgFzpks2h3Ra+SffoWG?= =?us-ascii?q?/x7vTvudLDVkiH5/Zb6zmRi//VK9xuDyWcS4yEtGoyVYntXWq3wA2R/e5tKJR/?= =?us-ascii?q?dh5EutxDKC2gDV5+pZO047j7DbJIQkwrMolpocr0DDHijulUXtia+Wal0k9vKm?= =?us-ascii?q?6uv5ebrmqIWTOJNoigH/NaQunNazDvg/MggLR2Sb+OK826P//UDhTrhGk+c6nr?= =?us-ascii?q?TbvZzGP8gXu7C1DgFP3oo+5RuyAC+q0NECknkGKFJFdgiHj4/sO1zWPf/3F/G/?= =?us-ascii?q?g1Wynzdv3fzJJaDhDYvLLnnClLfhfK1w5FBGyAop199f+5NUCqgcIP3tQEP+qN?= =?us-ascii?q?zYAgcjMwOo2+bnFMl91oQGVG2TGKCZNafSvUaM5uIuOOmMeJQYuC39Kvgg//7h?= =?us-ascii?q?l2U1mV4bfamz3JsYcmq0Hvp8IxbRXX25vNYMDS8us0JqUu3nlFmbAWN7aHO7Xq?= =?us-ascii?q?Z67TY+XsbuBo7GQsWpgaed9Ca9BJxfIG5cWX6WFnK9W4yCWvoIXwgGJN1lk3RQ?= =?us-ascii?q?WbGnSoIlkxuzuQnoz7tPI/DO8zEZrI/uktN1sb6A3Sou/CB5WpzOm1qGSHt5yz?= =?us-ascii?q?sF?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0DtAADZboBZgIZ7qh9cGwEBAQMBAQEJA?= =?us-ascii?q?QEBFgEBAQMBAQEJAQEBhBNtJ44Oc5BSIogzjVqCEiyBYIM7AoRdGAEBAQEBAQE?= =?us-ascii?q?BAQEBEgEBCQ0JCCYxgjMigkQBAgIBI1sLCxoCGA4CAiEmEAYBEooXAw0MDK5Eg?= =?us-ascii?q?iaHLw2EEQELASWBC4IdhWWCcIJXgXYmgxOCYQWfOzyBAoZOh2iHVYhBhxyMIYl?= =?us-ascii?q?YH4FCgVWHHHQBh2+CPwEBAQ?= X-IPAS-Result: =?us-ascii?q?A0DtAADZboBZgIZ7qh9cGwEBAQMBAQEJAQEBFgEBAQMBAQE?= =?us-ascii?q?JAQEBhBNtJ44Oc5BSIogzjVqCEiyBYIM7AoRdGAEBAQEBAQEBAQEBEgEBCQ0JC?= =?us-ascii?q?CYxgjMigkQBAgIBI1sLCxoCGA4CAiEmEAYBEooXAw0MDK5EgiaHLw2EEQELASW?= =?us-ascii?q?BC4IdhWWCcIJXgXYmgxOCYQWfOzyBAoZOh2iHVYhBhxyMIYlYH4FCgVWHHHQBh?= =?us-ascii?q?2+CPwEBAQ?= X-IronPort-AV: E=Sophos;i="5.41,306,1498514400"; d="scan'208";a="285708832" Received: from mail6.webfaction.com (HELO smtp.webfaction.com) ([31.170.123.134]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Aug 2017 14:12:07 +0200 Received: from hehey.local.mail (141-138-30-195.dsl.iskon.hr [141.138.30.195]) by smtp.webfaction.com (Postfix) with ESMTPSA id 9EEC7607AE604; Tue, 1 Aug 2017 12:12:06 +0000 (UTC) Date: Tue, 1 Aug 2017 14:12:06 +0200 From: =?utf-8?Q?Daniel_B=C3=BCnzli?= To: Viet Le , caml-list@inria.fr Message-ID: In-Reply-To: References: X-Mailer: Airmail (442) MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Subject: Re: [Caml-list] Float precision in OCaml On 1 August 2017 at 12:47:37, Viet Le (vietlq85@gmail.com) wrote: > 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. Here are a few tips:=C2=A0 1. The latest RFC recommends [1] to support the range of=C2=A0IEEE 754 doub= le precision numbers (those are OCaml's float) in JSON numbers. However sin= ce you are converting your floating point representation from binary to a d= ecimal one you can't guarantee to round trip your floats with a JSON number. 2. If you want to serialize precise integers with good interop you can do s= o using JSON number if they are in the range=C2=A0[-2^53;2^53] (the range w= ritten in the mentioned RFC seems wrong to me). Those are the integers a do= uble precision floating point numbers are able to represent precisely. 3. If you want to serialize precise floats you should do this as a JSON str= ing using a lossless textual notation for your binary floating point number= . Before OCaml 4.03 you can use this [2] function after 4.03 you can use fl= oat_of_string and the "%h" format string [3]. Best, Daniel [1]=C2=A0https://tools.ietf.org/html/rfc7159#section-6 [2]=C2=A0http://erratique.ch/software/gg/doc/Gg.Float.html#VALpp [3]=C2=A0https://github.com/ocaml/ocaml/pull/268