[go] push by i...@golang.org - spec: clarify implementation restrictions on untyped floats... on 2012-02-13 19:25 GMT

0 views
Skip to first unread message

g...@googlecode.com

unread,
Feb 13, 2012, 2:26:57 PM2/13/12
to golang-...@googlegroups.com
Revision: ad50b745d9ae
Author: Ian Lance Taylor <ia...@golang.org>
Date: Mon Feb 13 11:25:56 2012
Log: spec: clarify implementation restrictions on untyped floats

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 http://codereview.appspot.com/5577068/ .

Fixes issue 2789.

R=r, rsc, r, gri, ken, ken, iant
CC=golang-dev, remyoudompheng
http://codereview.appspot.com/5655049
http://code.google.com/p/go/source/detail?r=ad50b745d9ae

Modified:
/doc/go_spec.html

=======================================
--- /doc/go_spec.html Mon Feb 13 04:39:56 2012
+++ /doc/go_spec.html Mon Feb 13 11:25:56 2012
@@ -589,11 +589,33 @@
</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 -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">

Reply all
Reply to author
Forward
0 new messages