]> Cypherpunks repositories - gostls13.git/commitdiff
spec: clarify implementation restrictions on untyped floats
authorIan Lance Taylor <iant@golang.org>
Mon, 13 Feb 2012 19:25:56 +0000 (11:25 -0800)
committerIan Lance Taylor <iant@golang.org>
Mon, 13 Feb 2012 19:25:56 +0000 (11:25 -0800)
Drop reference to "machine type."  Specify that integer
overflow must be an error.  Drop requirement that exponent
must be 128 bits--that's a lot.  Clarify that floating point
expressions may be rounded, including intermediate values.

This is a reworking of https://golang.org/cl/5577068/ .

Fixes #2789.

R=r, rsc, r, gri, ken, ken, iant
CC=golang-dev, remyoudompheng
https://golang.org/cl/5655049

doc/go_spec.html

index 27c37c2ce16ad0634272259dc59d752a5a25fb07..7d4862f50db490a4e68692e9a144c6c793040038 100644 (file)
@@ -589,11 +589,33 @@ functions return and test for those values at run time.
 </p>
 
 <p>
-Implementation restriction: A compiler may implement numeric constants by choosing
-an internal representation with at least twice as many bits as any machine type;
-for floating-point values, both the mantissa and exponent must be twice as large.
+Implementation restriction: Although numeric constants have arbitrary
+precision in the language, a compiler may implement them using an
+internal representation with limited precision.  That said, every
+implementation must:
 </p>
+<ul>
+       <li>Represent integer constants with at least 256 bits.</li>
+
+       <li>Represent floating-point constants, including the parts of
+           a complex constant, with a mantissa of at least 256 bits
+           and a signed exponent of at least 32 bits.</li>
+
+       <li>Give an error if unable to represent an integer constant
+           precisely.</li>
 
+       <li>Give an error if unable to represent a floating-point or
+           complex constant due to overflow.</li>
+
+       <li>Round to the nearest representable constant if unable to
+           represent a floating-point or complex constant due to limits
+           on precision.</li>
+</ul>
+<p>
+These requirements apply both to literal constants and to the result
+of evaluating <a href="#Constant_expressions">constant
+expressions</a>.
+</p>
 
 <h2 id="Types">Types</h2>
 
@@ -3574,6 +3596,16 @@ int8(^1)   // same as int8(-2)
 ^int8(1)   // same as -1 ^ int8(1) = -2
 </pre>
 
+<p>
+Implementation restriction: A compiler may use rounding while
+computing untyped floating-point or complex constant expressions; see
+the implementation restriction in the section
+on <a href="#Constants">constants</a>.  This rounding may cause a
+floating-point constant expression to be invalid in an integer
+context, even if it would be integral when calculated using infinite
+precision.
+</p>
+
 <!--
 <p>
 <span class="alert">