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 C2F805D5 for ; Thu, 16 Jun 2022 06:24:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=date:from:to:cc:message-id:mime-version:in-reply-to: subject:reply-to:sender:list-id:list-help:list-subscribe: list-unsubscribe:list-post:list-owner:list-archive; bh=0c362LSsWmcAYKVJ7dzT4J27hVF4WP8CjpkfLA0W/NI=; b=tZ+80dJlYdsz09PDLSySfcloqGqJNOsVp66KCtE5d6oOSl/E4eubqI7s LT4Rj88nE+2iHEaHCiPSlWBToSduLal3hDb5mRUBRi5F/Y5G6J6l/MhOY umk8ct8AIW6JTBrFxVww/cuc/1sV5m0e0dixXnsYSEVxSp9hu+v6Eq5dN E=; Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=SoftFail smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr 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 X-IronPort-AV: E=Sophos;i="5.91,304,1647298800"; d="scan'208";a="41260773" 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 08:24:22 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 699B9E5D7B; Thu, 16 Jun 2022 08:24:22 +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 198ECE00BA for ; Thu, 16 Jun 2022 08:24:20 +0200 (CEST) IronPort-SDR: yWDT51m/UScSCPV273XnHz+2OWfqnITvyDHBW3Hhz4xwJOaRigtI9lvLrL5fPqdIdFgjRvpCxN kQOwHCkB20JWR06uT1eaWY66IYEDo1NEcT61FqEsGFAbnhrGebaHMmkDHQ3vRMtbR9/cK4pbpp R2QvnI6r6F1/fQyB8YKmO/xea6CBjmxVV5BxVMiwut0T9dE7w0dMlEu07lw8P5GGvx3CjQgjF6 dLo1x826nxDizyrL+1vMkekxbHeLdqCOy5PLn+C7M/jcLMZv4pCXj4YnEiEVASWdRv1GSGpsGl F5ILZZJcidDuSgjrzS622oaj X-IPAS-Result: =?us-ascii?q?A0DTAAAGzKpimHIDJ0JaDghzg3OBAVYuBwhEjU6lDoFoC?= =?us-ascii?q?wEDAQ03CQIEAQGFAwKFSQIeBgEENBMBAgQBAQEBAwIDAQEBAQEBAwEBBQEBA?= =?us-ascii?q?QIBAQIEBAETAQEBAQEBAQEJCwkHBhEQDgU8ZGcBgU4BgXkGBDANgjUig2wDA?= =?us-ascii?q?QInEz8bLS2DWQGDGAIBD65sgQEygQGDTwGGLoE9ileERQ8NgUhFhAg3PoJiA?= =?us-ascii?q?gGBGIEGDoNAgi4EjSeLcjkDGi00EoEhcQEIBgYHCgUyBgIMGBQEAhMSUx0CE?= =?us-ascii?q?gUHChwOFBwkGQwPAxIDEQEHAgsSCBUsCAMCAwgDAgMjCwIDFwkHCgMdCAocE?= =?us-ascii?q?hAUAgQTHgsIAxkfLAkCBA4DQwgLCgMRBAMTGAsWCBAEBgMJLw0oCwMUDQEGA?= =?us-ascii?q?wYCBQUBAyADFAMFGwwHAyEHCyYNDQQcBx0DAwUmAwICGwcCAgMCBhcGAgJvC?= =?us-ascii?q?iYNCAQIBBwdJBAFAgcxBQQvAh4EBQYRCQIWAgYEBQIEBBYCAhIIAggnGwcWG?= =?us-ascii?q?R0ZAQVdBgsJIRwpCwYFBhYDI3MFCj4PKTU2PC8hGwqBJiooAR2aIoIGAYFFg?= =?us-ascii?q?TKiRJ4DOoNYgVCBZYdqlFpLhwChYS2WP40tmgiBeF6BIE0wCDuCaAlFAQIBA?= =?us-ascii?q?g0BAgIDAQIBAgEIAQECAY41g1lqiS9UMjQCATgCBgsBAQMJhUaJOwEB?= IronPort-PHdr: A9a23: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 IronPort-Data: A9a23:IiJ5LqCsRDpOnRVW/wjlw5YqxClBgxIJ4kV8jS/XYbTApDhzhmFUz DRMW2qHPP/fazenLtonOYznpB8Fv5bXytMyOVdlrnsFo1Bi+ZOUX4zBRqvTF3rPdZObFBoPA +E2MISowBUcFyeEzvuVGuG96yE6j8lkf5KkYAL+EnkZqTRMFWFw0HqPp8Zj2tQy2YbgXVvU0 T/Pi5S31GGNi2Yc3l08sPrrRCNH5JwebxtF1rCWTakjUG72zxH5PrpHTU2CByeQrr1vIwKPb 72rIIdVUY/u10xF5tuNyt4Xe6CRK1LYFVDmZnF+A8BOjvXez8A/+v5TCRYSVatYo3KShtp+z 8RBj8SXYD4UE+7QkdURbDANRkmSPYUekFPGCX22sMjKiUKdNWPlwu8oB0YzVWEa0rgpRzofs 6decWlRBvyAr7reLLaTTe1hiewkL8zqPsUYoH4IITTxUa98H8icH/uiCdlw8W4JneNVLNjif O0daDxLYhWYXiBjJQJCYH45tLv03SinL1W0smm9rqMy5y3XzRdt+KP8NcLcPN2MX8Rc2EiCz l8q5Ez8CxAebZqQknyd+3O2wOTImEsXRb7+CpX/7edgj1qCylZLLzQvaHb4vfCIhnGXDoc3x 1MvxgIiqq079UqOR9b7XgGlrHPsgvL6c4YJewHdwF3Qopc48zp1FUBfEWEcMI1OWNseAG11h gXQzrsFEBQ26OXNIU9x4It4ut9bBMT4BWoLZCtdCwRepcHqoZt1hRXKJjqCLEJXpoClcd0T6 2nVxMTbu1n1pZVTv0lc1Quf6w9AXrCTEmYICvz/BwpJFD9Rao+/fJCP4lPG9/tGJ4vxZgDf4 SVfwpfOtrFRUs7leMmxrAMlQe/BCxGtbWK0vLKTN8lJG8mFoi7zIdkOiN2ADBc0ba7ohgMFk GeP5VgAvMM70IqCdaZ2ecq3Btg1yrLjDrzYugP8MLJzjmxKXFbfpklGPBfAt0iwzhREufxha P+zLJb9ZV5HWP8P5GfnGI81j+V3rghgnjm7bc6gkHyaPU+2OST9pUEtagXeN4jULcqs/W3oz jqoH5DamkkHAbOiO3S/HEx6BQliEEXXzKve86R/HtNv6CI/cI34I/OOk74nZaJ/mKFZyrXB8 n2nCx1fy1/+hzvAMwrTMiJvb7bmXJBeq3MnPHV0ZQ/ziyB+Md+ivPUFap86Xbg77+g/n/R6e P8IJpebCfNVRzWbpjkQNMGvrIFreBmxqxiJOi6pPGo2c5J6Fl7O+drlfE3o7iZXVni7ss43o ruB0ALHQMNbH105XJ6LOKuilgrjs2IcleR+W1rzDuNSIEi8opJ3LyHRj+MsJ51eIxv0wDbHh R2dBg0VpLWQroI4rIvJiKSDo9v7GudyBBMFTWzS7LLvcyaBuHKqwJUGW+GNJGiPWGTx8aSkR ONU0/CsaK1YxQYW69JxQ+Rx0KYzx9rzvLsEnA5qK3X8cAj5AL1XJHTbj9JEsbdAx+IHtFLuC F6P4NRTJZ6AJNjhTAwKPAMgY+nfh+sYnCLesaY8LEngvXAl+bOGVRwUMELKkCVcNv1+N4Z8m bUtv8sf6gqejBs2M4be3n8NpzjUdnFQAb86spw6AZPwjlR5wF91YavDVn387qaJZogeKUItO DKV2fTP3uwO2krYfnMvPnHRxu4B148WsRVHwVJqy45lQTYZaivbHSG98AjbiixQxxRDiqR8Y S5zPkxvY66J+l+EQeBdCnu0FVgp6AKxoyTMJ5khzQU1jHVEkkTKL2g8O6CK5k9xH6d0YG1A5 L/BoIr6eW+CQSwytxfenWZiqPniT5p27AKqdAVL2SiaN8FSXAcJSZNCqYbFR9ULzC/xaID6S TFWwdtN IronPort-HdrOrdr: A9a23:ZX9ZFKrTkJgrm7vezexT828aV5oUeYIsimQD101hICG9vPb3qy mLpoV+6faUskd1ZJhOo7290cW7LU80sKQFhrX5Xo3SPjXOnGOpKcVM647mxSP9AmnC8IdmpM RdmspFaOEYZGIS5a2R3ODSKbcdKbe8n5xAyd2uqUtQcQ== X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.91,304,1647298800"; d="scan'208";a="41260746" X-MGA-submission: =?us-ascii?q?MDFZJTRDw2P7T5dPAI2ISC6CQw7KqUeJXyiYvc?= =?us-ascii?q?mxq47biVPqMZTVB1heZB4xLnE5msWTprPN5I9y3o5dBooU8+orYALvI8?= =?us-ascii?q?Z06lsm+IuuY8kIuisX6ZbL6RaiCZmT6dtUUIYrb/T4h7vsG4Hv/3auDL?= =?us-ascii?q?OfyC7Y8I7QpD9Wg9fKOHN4DQ=3D=3D?= Received: from mail1.g3.pair.com ([66.39.3.114]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2022 08:24:18 +0200 Received: from mail1.g3.pair.com (localhost [127.0.0.1]) by mail1.g3.pair.com (Postfix) with ESMTP id F07613FBA9C; Thu, 16 Jun 2022 02:24:16 -0400 (EDT) Received: from Melchior.localnet (148.150.159.133.rev.vmobile.jp [133.159.150.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail1.g3.pair.com (Postfix) with ESMTPSA id E2818582C86; Thu, 16 Jun 2022 02:24:14 -0400 (EDT) Date: Thu, 16 Jun 2022 15:24:05 +0900 From: Oleg To: asai@is.ocha.ac.jp Cc: caml-list@inria.fr Message-ID: <20220616062405.GA1555@Melchior.localnet> Mail-Followup-To: Oleg , asai@is.ocha.ac.jp, caml-list@inria.fr MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Subject: Re: [Caml-list] string_of_float (0.1 +. 0.2) Reply-To: Oleg X-Loop: caml-list@inria.fr X-Sequence: 18802 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: Actually the similar problem of accurately conveying floats also occurs in MetaOCaml/Code generation. After all, what you are doing is a sort of reflection. First of all, accurate (lossless) printing of floats is a research area in itself. The latest result is http://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf https://github.com/google/double-conversion Perhaps some day it can be incorporated in OCaml, so that string_of_float truly returns *the* printable representation of a float. Hexademical printout (which is also supported in C) mentioned by Daniel Buenzli is another way -- provided we don't actually have to look at the printed value, because we probably won't understand it anyway. In practice in our recent project, we settled on let float : float -> float cde = fun x -> let str = if Float.is_integer x then string_of_float x else Printf.sprintf "%.17g" x which seems to work well. At least, it solved the problems when the results of our generated signal processing code differed slightly from the results of the hand-written reference C code, due to slightly different printed FP values in FP array initializers (filter coefficients). We used to use string_of_float back then. With the above float, the problem is solved. I have to add that float above does not account for NaN, plus/minus infinity and -0. So, the fully production code also has to add these cases.