From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTPS id 0CB915D5 for ; Thu, 16 Jun 2022 09:01:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=mime-version:from:in-reply-to:date:cc:message-id: references:to:subject:reply-to:sender:list-id:list-help: list-subscribe:list-unsubscribe:list-post:list-owner: list-archive; bh=A3HbhaKolQZr1G3VXQqAViGvIDhJlLrMDK6K9BFJ3mg=; b=cV2ODhdSxyXV6anQ6+Qc4aQHEMy7J7Qo7WIz7VBQAJ4DXKJ7BPFNV81z b5Ys4np3u7mXVTKsB71j+ebA0wvOXjZ4r1eGKh2ts6jnongVy+FIvtvxD H6oOkXGVFahbsrlQSRU6M5hEnZKcqhYy5BPUGLwUqEjhdODIzVHbMy4/N o=; Received-SPF: SoftFail (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr is inclined to not designate 128.93.162.160 as permitted sender) identity=mailfrom; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:192.134.164.0/24 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@sympa.inria.fr) identity=helo; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@sympa.inria.fr"; x-conformance=spf_only Authentication-Results: mail2-relais-roc.national.inria.fr; spf=SoftFail smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr; dkim=hardfail (signature did not verify [final]) header.i=@mpi-sws.org X-IronPort-AV: E=Sophos;i="5.91,304,1647298800"; d="scan'208,217";a="41302308" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 16 Jun 2022 11:01:54 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 0C08CE5D71; Thu, 16 Jun 2022 11:01:54 +0200 (CEST) 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 F39BFE5D6A for ; Thu, 16 Jun 2022 11:01:50 +0200 (CEST) IronPort-SDR: j04sNIk3F6eTDed+Ru3b3mDo0cD4ml/s6M9YFq1gXws0VgCIpgsvxjtJuUm7NpjGY3YrIkZPam RmF4LD/hvKLKBlXwS5p3fW8Dxv5gTXtWfEJr72LDj30VxbrWY92v1j6dwgxdwAA/5OFFzoJMbX bbK+of5zwL/RXV+PShiiPR+kQspfsXwxyFaScU3CTysvxM/StBj0Sh6AKCCuEAemzynoeAUb3m hQiD2X8Y5xY/E89E3tFfWb7W1LzbyGuHu0kBlHgs7CB9zUG008DVWwYeYEUWrzt5nkfAu7tlz/ OxTlltbnD2AQiVVdejgUgr8l X-IPAS-Result: =?us-ascii?q?A0AJAABq8KpimA9WE4taGwEBAQEBAQEBBQEBARIBAQEDA?= =?us-ascii?q?wEBAYF+AwEBAQsBgiOBWC0EC0SETokAhWeCKJ5nCwEDAQ0/AQIEAQGFAwKFS?= =?us-ascii?q?QIdBwEEMwYOAQIEAQEBAQMCAwEBAQEBAQMBAQUBAQECAQECBAQBEwEBAQEBA?= =?us-ascii?q?QEBCQsJBwYMBRAOBTxkZAOBTAOBegYEMA2CNSKDawEBAQECASMEGQEBNwEEC?= =?us-ascii?q?wsECAwcDgICVwYTgn2CdiMDBK4Wen8ygQGCCAEBBoJdhQgJgT0Bh0cBhywnH?= =?us-ascii?q?IINgTwcgmc+iBo3gi6ZFwc4AwkEBwUuNBKBIXEBCAYGBwoFMgYCDBgUBAITE?= =?us-ascii?q?lMLEgISDAocDg5GGQwPAxIDEQEHAgsSCBUsCAMCAwgDAgMjCwIDFwkHCgMdC?= =?us-ascii?q?AocEhAUAgQTHgsIAxkfLAkCBA4DQwgLCgMRBAMTGAsWCBAEBgMJLw0oCwMUD?= =?us-ascii?q?QEGAwYCBQUBAyADFAMFGwwHAyEHCyYNDQQcBx0DAwUmAwICGwcCAgMCBhcGA?= =?us-ascii?q?gJALwomDQgECAQcHSQQBQIHMQUELwIeBAUGEQkCFgIGBAUCBAQWAgISCAIIJ?= =?us-ascii?q?xsHFjYZAQVdBgsJIRwpCwYFBhYDI3MFB0EPKTU2PC8hGwqBJioGIgEcnW+BM?= =?us-ascii?q?sEBg1iEGZwrlmEGkXotlj+iZwGETYF3gX9NMAg7KgGCPT4QAQIBAg0BAgIDA?= =?us-ascii?q?QIBAgEIAQECAY4cGYhthUxAMzsCBgEKAQEDCYVGAQEBiTgBAQ?= IronPort-PHdr: A9a23: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 IronPort-Data: A9a23:EJLZHKrrw1gDMLTqK1RZKSHb1mZeBmL3YxIvgKrLsJaIsI4StFCzt garIBnUM/yCYmejc40iatzn/BxU65XdmIAyS1FqryxkQXxAoOPIVI+TRqvSF3PLf5ebFCqLz O1HN4KedJhsJpP4jk3wWlQ0hSAkjclkfpKlVKicfHoZqTZMEE/Nszo68wICqtMu0IHR7z+l4 4uo+ZWBYQH9glaYD0pNg069gEM31BjNkGhA1rAOTagjUIj2yhH5pLpGTU2AByOQrrt8RoZWd M6fpF2NxV41yj92Yj+TfhkXRWVRKlLaFVDmZnO7wMFOiDAazsA5+v5T2Pbx9S67hh3R9+2dx umhurSfagMFH7LXpdheEBRWPXx6BJ0WxOHYdC3XXcy7lyUqclPu3u1vEEwse4gA+6N0BXpEs /kAJ3YBY3hvhcrvm+P9E7gq1ppldZSD0IA34hmMyRnDCu09S53ZTI3P/d4dxygrwMdUEp4yY uJFMGE3Nk6fPXWjPH8+MZA8nf2Il0LxcgNGpm2Ota4+yi/cmVkZPL/FaoOOI4faFK25hH2wr WvD+yH9AwoGHMeOzCKMtHOqnO7G2y3hML/+D5W66+ZrnFCJgGkLCVgVUUCx5/yhhQiyVrqzN nD45AIBjqwe1VOwc+W+HBC2jiOAhy5MZ4RPRrhSBB629oLY5AOQB24hRzFHacA7uMJeedDM/ gPS9z8OLWI22IB5WU5x5Z/J9GnjaHN9wXsqNHNVFFNtD8zL+tlr5i8jWOqPB4aZo7XI9dzYw S2SrTQznfMWlc9O1KGg9xbCmz3qqpWhou8JCuf/ATjNAuBRPdPNi2mUBb7ztq0owGGxEgLpg ZT8s5LChN3i9LnU/MB3fM0DHauy+9GOOyDGjFhkEvEJrmrwpiX6ItAKvmAlei+F1/ronxe3P ic/XisOv/du0IeCN/IqC25MI5Rylfm8So6Nug78M4EfO8gZmPC7ENFGPxfLhju9wSDAYIkzN IqHas2sAG1SB6N91zG2WuESyrkm2jJW+I8gbc+T8vhT6pLHPCT9Ye5caDOmN7lphIvZ/lm92 4sBZqOilkUOOMWjM3K/2dNCcjgicyNhbbio8JM/SwJ2Clc8cI3XI6WPkepJlk0Mt/k9q9okC VnmAxIFlgei3iSWQehIA1g6AI7SsV9EhSpTFUQR0ZyAghDPuK6js/UScYUZZ74i+LAxxPJ4V aBcKcCYA7FUVS+B/C4SNMGvoItnfRWtpASPIyv8OWJlJ8c6HVOV94+2ZBbr+QkPEjGz6Zk0r Yqm216JWpEEXQljUJvbZav3nVO8tHQQgsxoWE7MLoUBcUng6tEzeSnpj7osPNpKLg/Mn2PI2 wGTCBYehO/Mv45sqYOT3fne9dj1HrInTERAHmTd4bKnDgXg/zKukd1aTeKFXTHBT2eoqq+sU uNYkqPnO/odkVcW7odxHuo5za864Nez9bZWwh4+RyfJckyqFr56ZHye3IxMsrZHgLpBtk26V xvXqNVdPLyIPuLjEUIQfVZ0ML7ciKtMwjSCv+4oJEja5TNs+OTVW0tlPy6T1n5XIox1B4Uon LU6s8kM5g3i1BdzaoSajjpZ/ninJ2AbV/l1rYkTBYLm1lgxxldZbcCOAyP6+svUOddRKkg2L yXSgbLDwrdY3UCEdmI8U3TAhLIPiZMLsRFM7VkDO1XQxoub3KBqhkUJ/GRlVBlRwzVGz/l3Z DphOXp1ErrQrT1ms8h0WW3xSRpKAweU+xGvxgJRxnHZVUShSkfEMHY5ZbSW5Ekc/m9RFtSBE Gp0FIoxvffWkMDNMu8aW1N9quDuV5p07gyHm8S8FYKAB5Z8bTeNbmpCo4YXg0OPPC/zrBSvS SpWECJYbLX6cDUPuOs8EYbyOXE4VkWfPGIbKR1+1PphIIwfEQ1eHRCLM0H0YdxWYfvQ/idUz iCoyt1nD3yD6cpFktzX6WPg7VO5cD7FKefuoo/WGFM= IronPort-HdrOrdr: A9a23:329IvqC9n0xCpU3lHek055DYdb4zR+YMi2TDGXoBKyC9E/b1qy nKpp8mPHDP+VUssR0b+OxofZPhfZqjz+8R3WBhB9iftWDd0QPDQb2Kr7GSpwEIcBeRygcy79 YGT0EHMqyXMXFKyf3B2SGdPpIKyMLvytHSuc7ui0xWdClPRuVP9AtoDwaAD0F6LTM2f6YRJd 6m3PNugxflQngPaN+nb0N1J9TrlpnxrqvPRTNDPRQg8wXmt0LQ1JfKVyOj5z87fnd03L8+7X KtqX2F2pme X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.91,304,1647298800"; d="scan'208,217";a="41302276" X-MGA-submission: =?us-ascii?q?MDEcCyDwPNTKsQS+JoIui5Dc/T7ZxY3GPFXuN8?= =?us-ascii?q?BjKHhcTJgb0K9c4XVc0X8EMBMIHwsAoPu3UX0Ul/XFHYP7ztrn7SYbbR?= =?us-ascii?q?HWnzD6lJk6vaZrcNTZh11rUeATwvTG8twVPT/yogFm/rUuUlyZnaGNi5?= =?us-ascii?q?AwF8jwfUYc/jOz2wZ6NatVlg=3D=3D?= Received: from jupiter.mpi-klsb.mpg.de ([139.19.86.15]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2022 11:01:50 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mpi-sws.org ; s=mail201904; h=To:References:Message-Id:Cc:Date:In-Reply-To:From:Subject: Mime-Version:Content-Type:sender:reply-to:content-transfer-encoding: content-id:content-description:resent-date:resent-from:resent-sender: resent-to:resent-cc:resent-message-id:list-id:list-help:list-unsubscribe: list-subscribe:list-post:list-owner:list-archive; bh=A3HbhaKolQZr1G3VXQqAViGvIDhJlLrMDK6K9BFJ3mg=; b=D36bzYoZCNXZaX9Aa54ifB25Se BGM6rWjUSi+UCJPmZpj4ULgHVL9NlL0yufwSIE3sdjZ0VnLX/Vd70BMWOm91qgnBi9kBcUSv505W0 JO5RuHzojDhTbC+8YFfGDzoO+4jwEGu64hr9ZokK6fW0c+6JGpOvGmaiXGGw4YxQTFF8=; Received: from srv-00-62.mpi-klsb.mpg.de ([139.19.86.27]:38896 helo=max.mpi-klsb.mpg.de) by jupiter.mpi-klsb.mpg.de (envelope-from ) with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) id 1o1lNg-0005LL-5r; Thu, 16 Jun 2022 11:01:42 +0200 Received: from [46.183.103.8] (port=16413 helo=smtpclient.apple) by max (envelope-from ) with esmtpsa (TLS1.2:ECDHE_SECP256R1__RSA_SHA256__AES_256_GCM:256) (Exim 4.94.2) id 1o1lNf-0005cs-Co; Thu, 16 Jun 2022 11:01:35 +0200 Content-Type: multipart/alternative; boundary="Apple-Mail=_A6D808A3-B3F5-4494-B4D8-3731E2F81CD6" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.80.82.1.1\)) From: Andreas Rossberg In-Reply-To: <20220616062405.GA1555@Melchior.localnet> Date: Thu, 16 Jun 2022 11:01:32 +0200 Cc: asai@is.ocha.ac.jp, caml-list@inria.fr Message-Id: <57A2C5E8-34C7-4B90-9FEF-607B8236E379@mpi-sws.org> References: <20220616062405.GA1555@Melchior.localnet> To: Oleg X-Mailer: Apple Mail (2.3696.80.82.1.1) X-RSPAMD-Score: 4.4 (++++) X-RSPAMD-Report: Action: soft reject Symbol: ARC_NA(0.00) Symbol: RCVD_VIA_SMTP_AUTH(0.00) Symbol: RECEIVED_SPAMHAUS_CSS(1.00) Symbol: MID_RHS_MATCH_FROM(0.00) Symbol: R_SPF_NEUTRAL(0.00) Symbol: FROM_HAS_DN(0.00) Symbol: MV_CASE(0.50) Symbol: RCPT_COUNT_THREE(0.00) Symbol: MIME_GOOD(-0.10) Symbol: TO_MATCH_ENVRCPT_ALL(0.00) Symbol: DMARC_NA(0.00) Symbol: TO_DN_SOME(0.00) Symbol: GREYLIST(0.00) Symbol: RECEIVED_SPAMHAUS_XBL(3.00) Symbol: FROM_EQ_ENVFROM(0.00) Symbol: R_DKIM_NA(0.00) Symbol: MIME_TRACE(0.00) Symbol: ASN(0.00) Symbol: RCVD_COUNT_TWO(0.00) Symbol: RCVD_TLS_ALL(0.00) Message: Try again later Message-ID: 57A2C5E8-34C7-4B90-9FEF-607B8236E379@mpi-sws.org X-RSPAMD-Bar: ++++ X-RSPAMD-Greylisted: yes X-RSPAMD-Status: Yes Subject: Re: [Caml-list] string_of_float (0.1 +. 0.2) Reply-To: Andreas Rossberg X-Loop: caml-list@inria.fr X-Sequence: 18803 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --Apple-Mail=_A6D808A3-B3F5-4494-B4D8-3731E2F81CD6 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Since I believe it hasn=E2=80=99t been stated explicitly in this thread = yet, a reminder that it is generally _impossible_ to represent arbitrary = float values accurately (and finitely) in decimal notation. Except for = few cases, you will have to cut off and round at some point. But that doesn=E2=80=99t necessarily mean that round-tripping between = text and binary loses precision, as long as the rounding is precise = enough for both binary-to-text and text-to-binary conversion. Though as = Oleg points out, that is not an easy problem. > On 16. 6. 2022, at 08:24, Oleg wrote: >=20 > In practice in our recent project, we settled on >=20 > let float : float -> float cde =3D fun x -> > let str =3D if Float.is_integer x then string_of_float x else > Printf.sprintf "%.17g" x "%.17g" is what we use in the WebAssembly reference interpreter as well. = Plus, we do some extra work to also preserve -0.0 and NaNs. Simplified a = bit, it's something like this: let float_to_string x =3D let x' =3D abs_float x in (if Int64.bits_of_float x < 0L then "-" else "") ^ if x' <> x' then let payload =3D Int64.(logand (bits_of_float x') = 0x000f_ffff_ffff_ffffL) in "nan:0x" ^ Printf.sprintf "%Lx" payload else let s =3D Printf.sprintf "%.17g" x' in if s.[String.length s - 1] =3D '.' then s ^ "0" else s Our of_string function recognises the special NaN syntax accordingly. /Andreas --Apple-Mail=_A6D808A3-B3F5-4494-B4D8-3731E2F81CD6 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8
Since I believe it hasn=E2=80=99t been stated explicitly in this = thread yet, a reminder that it is generally _impossible_ to represent = arbitrary float values accurately (and finitely) in decimal notation. = Except for few cases, you will have to cut off and round at some = point.

But that doesn=E2=80=99t necessarily mean that = round-tripping between text and binary loses precision, as long as the = rounding is precise enough for both binary-to-text and text-to-binary = conversion. Though as Oleg points out, that is not an easy = problem.

On 16. 6. 2022, at 08:24, Oleg <oleg@okmij.org> = wrote:

In practice in our recent project, we settled on

let float : float -> float cde =3D fun x = ->
 let str =3D if Float.is_integer x then = string_of_float x else
=            Printf.s= printf "%.17g" x

"%.17g" is what we use in the WebAssembly reference = interpreter as well. Plus, we do some extra work to also preserve -0.0 = and NaNs. Simplified a bit, it's something like this:

  let float_to_string x = =3D
    let x' =3D abs_float x in
  =   (if Int64.bits_of_float x < 0L then "-" else "") = ^
    if x' <> x' then
    =   let payload =3D Int64.(logand (bits_of_float x') = 0x000f_ffff_ffff_ffffL) in
      "nan:0x" ^ = Printf.sprintf "%Lx" payload
    = else
      let s =3D Printf.sprintf "%.17g" x' = in
      if s.[String.length s - 1] =3D '.' = then s ^ "0" else s

Our of_string function recognises the = special NaN syntax accordingly.

/Andreas

= --Apple-Mail=_A6D808A3-B3F5-4494-B4D8-3731E2F81CD6--