J3/05-119r1
Date: 31 Jan 2005
To: J3
From: John Reid
Subject: 2.0+2.0, x/5.0 vs x*0.2
Here is a draft response for F03/0040, with thanks to Malcolm Cohen
for his help.
NUMBER: F03/0040
TITLE: 2.0+2.0 and IEEE
KEYWORDS: IEEE-754, accuracy, transformation
DEFECT TYPE: Interpretation
STATUS: For consideration
QUESTION:
For processors that use IEEE arithmetic, must 2.0+2.0 be 4.0?
May x/5.0 be transformed into x*0.2?
1.4 (6) [2:4-5] has: "This standard does not specify: The
physical properties of the representation of quantities and the
method of rounding, approximating, or computing numeric values
on a particular processor." That has been used as the reason
why 2.0+2.0 is not required to be 4.0.
Section 14 [364:6-13] has: "If a scoping unit has access to
IEEE_DATATYPE of IEEE_FEATURES, within the scoping unit the
processor shall support IEEE arithmetic and return true from
IEEE_SUPPORT_DATATYPE(X) (14.10.23) for at least one kind of
real. Similarly, if IEEE_DENORMAL, IEEE_DIVIDE, IEEE_INF,
IEEE_NAN, IEEE_ROUNDING, or IEEE_SQRT is accessible, within the
scoping unit the processor shall support the feature and return
true from the corresponding inquiry function for at least one
kind of real. In the case of IEEE_ROUNDING, it shall return true
for all the rounding modes IEEE_NEAREST, IEEE_TO_ZERO, IEEE_UP,
and IEEE_DOWN." IEEE-754 specifies methods of rounding and
computing numeric values, and in particular, requires that
2.0+2.0 be 4.0.
So, does section 14 override the weasel words of 1.4(6)? If
not, should something along the lines of: "The requirements of
this section override 1.4(6)" be added to section 14?
Using IEEE arithmetic, x/5.0 and x*0.2 are not equivalent, so
the former may not be transformed into the latter. Does IEEE
arithmetic override 7.1.8.3 and Note 7.18 and prohibit that
transformation? If not, should something along the lines of:
"The requirements of this section override 7.1.8.3" be added to
section 14?
ANSWER:
Yes, for processors that use IEEE arithmetic, 2.0+2.0 and 4.0
have the same value. That is a requirement of the IEEE
International Standard. However, your example is very simple.
For a more complicated expression, the IEEE Standard does not
specify whether intermediate results are kept in extended-
precision registers. The words in Section 1 are applicable
and give compilers the freedom to choose whether to keep
intermediate results in such registers.
No, section 14 does not override the weasel words of 1.4(6).
As you point out, Section 7 allows x/5.0 to be evaluated as
x*0.2. The results may be different on any binary computer.
Section 14 tells us about the rounding that will occur once
the processor has chosen which way to evaluate this.
EDITS: None
SUBMITTED BY: Fred Tydeman
HISTORY: J3/05-119 m171 Submitted