Re: [Json] I-JSON Topic #5: Numbers

Carsten Bormann <cabo@tzi.org> Tue, 27 May 2014 17:27 UTC

Return-Path: <cabo@tzi.org>
X-Original-To: json@ietfa.amsl.com
Delivered-To: json@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7C1791A01BA for <json@ietfa.amsl.com>; Tue, 27 May 2014 10:27:54 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.551
X-Spam-Level:
X-Spam-Status: No, score=-1.551 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HELO_EQ_DE=0.35, SPF_HELO_PASS=-0.001] autolearn=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AG1EsXUo6X0Y for <json@ietfa.amsl.com>; Tue, 27 May 2014 10:27:52 -0700 (PDT)
Received: from informatik.uni-bremen.de (mailhost.informatik.uni-bremen.de [IPv6:2001:638:708:30c9::12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 67CF01A01AF for <json@ietf.org>; Tue, 27 May 2014 10:27:52 -0700 (PDT)
X-Virus-Scanned: amavisd-new at informatik.uni-bremen.de
Received: from smtp-fb3.informatik.uni-bremen.de (smtp-fb3.informatik.uni-bremen.de [134.102.224.120]) by informatik.uni-bremen.de (8.14.5/8.14.5) with ESMTP id s4RHRSfY001817; Tue, 27 May 2014 19:27:28 +0200 (CEST)
Received: from [192.168.217.148] (p54892D14.dip0.t-ipconnect.de [84.137.45.20]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by smtp-fb3.informatik.uni-bremen.de (Postfix) with ESMTPSA id A5A9E1D97; Tue, 27 May 2014 19:27:27 +0200 (CEST)
Content-Type: text/plain; charset="windows-1252"
Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.2\))
From: Carsten Bormann <cabo@tzi.org>
In-Reply-To: <5384C118.4060402@cisco.com>
Date: Tue, 27 May 2014 19:27:26 +0200
X-Mao-Original-Outgoing-Id: 422904446.038891-d94cdab6d06d150fcfc1df6004d0fae6
Content-Transfer-Encoding: quoted-printable
Message-Id: <14DB352D-3D0C-458A-90BE-38BCA8CC98DD@tzi.org>
References: <535EB3BF.8080606@cisco.com> <CAHBU6ivjF9ULW0yGSVdJi2D6QgUThuhym_ZhpgLM=cvLu=mAiQ@mail.gmail.com> <CF841AAE.47D86%jhildebr@cisco.com> <CAHBU6itK5HtSTPWSsHsHUPja90emqU86LsgjrBorkqcUDivS2A@mail.gmail.com> <CF87EB9C.48BB0%jhildebr@cisco.com> <537A5BE0.3020406@cisco.com> <CF9FCEC9.4A4E7%jhildebr@cisco.com> <488AE66E-725D-40B3-9FDA-ADA1018BCF65@tzi.org> <CFA0F09E.4A609%jhildebr@cisco.com> <255B9BB34FB7D647A506DC292726F6E115461FFE59@WSMSG3153V.srv.dir.telstra.com> <20140521020731.GG9283@mercury.ccil.org> <CFA21B5C.4A721%jhildebr@cisco.com> <255B9BB34FB7D647A506DC292726F6E1154629E87D@WSMSG3153V.srv.dir.telstra.com> <CAHBU6isO7oooeN8rH8emx-xuOrs2yzBUrhyJNYYAyzK2-QfF0w@mail.gmail.com> <CAK3OfOih-YO-ncbSc3dVv_O7uHfjRxCDjUpzHmkFG5Dj7kb-xg@mail.gmail.com> <5384C118.4060402@cisco.com>
To: Matt Miller <mamille2@cisco.com>
X-Mailer: Apple Mail (2.1878.2)
Archived-At: http://mailarchive.ietf.org/arch/msg/json/-fIzoXPuWQJrCXGO7Gd6HsR5m78
Cc: Nico Williams <nico@cryptonector.com>, Tim Bray <tbray@textuality.com>, IETF JSON WG <json@ietf.org>
Subject: Re: [Json] I-JSON Topic #5: Numbers
X-BeenThere: json@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: "JavaScript Object Notation \(JSON\) WG mailing list" <json.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/json>, <mailto:json-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/json/>
List-Post: <mailto:json@ietf.org>
List-Help: <mailto:json-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/json>, <mailto:json-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 27 May 2014 17:27:54 -0000

On 27 May 2014, at 18:45, Matt Miller <mamille2@cisco.com> wrote:

> I've been told off-list that IEEE 754 (which is referenced from RFC
> 7159, in case we've all forgotten) doesn't cover this topic at all,
> and my own superficial review leads me to concur.

IEEE Std 754-2008 describes a number of formats, and binary64 (the one that JavaScript and thus many JSON implementations uses) is just one of them.  You need to combine some basic CS knowledge with the specific constants for binary64 inserted into the generic formulae given before you can derive much meaningful information from IEEE Std 754-2008.

An obvious reference (heed the title!) is

David Goldberg: What Every Computer Scientist Should Know About Floating-Point Arithmetic, Computing Surveys, March, 1991.

(reprint available from: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html ).
That does discuss binary64 (not under this name), but does not benefit from the recent changes to IEEE 754.
It is also probably more accessible to CS people than to the general public.

“95% of the folks out there are completely clueless about floating-point.” 
(James Gosling 1998-02-28, as attributed by William Kahan)

We cannot fix this in this draft.

What we can do is warn that the only numbers that have a good chance to be taken as exact numbers are the integers in [-2**53, 2**53], and that all numbers in many implementations are subject to the whims of floating point arithmetic as defined for binary64 in IEEE Std 754-2008.
I wouldn’t try to go beyond that.  (In particular I’d not single out denorms, but I think I said that already.)

Grüße, Carsten