• Robert Griesemer's avatar
    spec: clarify numeric conversions where IEEE-754 produces -0.0 · 55ecda4f
    Robert Griesemer authored
    The spec defines precise numeric constants which do not overflow.
    Consequently, +/-Inf and NaN values were excluded. The case was not
    clear for -0.0 but they are mostly of interest to determine the sign
    of infinities which don't exist.
    
    That said, the conversion rules explicitly say that T(x) (for a numeric
    x and floating-point type T) is the value after rounding per IEEE-754.
    The result is constant if x is constant. Rounding per IEEE-754 can
    produce a -0.0 which we cannot represent as a constant.
    
    Thus, the spec is inconsistent. Attempt to fix the inconsistency by
    adjusting the rounding rule rather than letting -0.0 into the language.
    
    For more details, see the issue below.
    
    Open to discussion.
    
    Fixes #12576.
    
    Change-Id: Ibe3c676372ab16d9229f1f9daaf316f761e074ee
    Reviewed-on: https://go-review.googlesource.com/14727Reviewed-by: 's avatarRob Pike <r@golang.org>
    Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
    55ecda4f
go_spec.html 193 KB