J3/99-179
Date: 21 July 1999
To: J3
From: John Reid and Dick Hendrickson
Subject: Edits re IEEE modules
We propose the following edits to J3/99-007R2:
1.
[383:30] Change "a process" to "an operation".
[383:32] Change "process" to "operation".
[383:41] Change "process" to "operation".
[384:1-10] Delete J3 internal note.
2.
[386:26+] Add
o IEEE_SUPPORT_IO([X]) Inquire if the processor supports the
IEEE IO base conversion rounding.
[397:19-21] Delete J3 internal note.
3.
[387:9+] Add note:
If X or Y has a value that is an infinity or a NaN, the result
shall be consistent with the general rules in sections 6.1 and 6.2
of the IEEE standard. For example, the result for an infinity
shall be constructed as the limiting case of the result with a
value of arbitrarily large magnitude, when such a limit exists.
4.
[387:35+] Add note:
It is intended that processors should not check a condition given in
a paragragh labeled <> at compile time, but rather
should rely on the programmer writing code such as
IF (IEEE_SUPPORT_DATATYPE(X)) THEN
C = IEEE_CLASS(X)
ELSE
:
END IF
to avoid a call ever being made on a processor for which the
condition is violated.
[387:39-40] Delete "and such that IEEE_SUPPORT_DATATYPE(X) has the
value true" and add:
Restriction. A program is prohibited from invoking this procedure if
IEEE_SUPPORT_DATATYPE(X) has the value false.
Apply the same edits to IEEE_IS_FINITE, IEEE_IS_NAN, IEEE_IS_NEGATIVE,
IEEE_IS_NORMAL, IEEE_LOGB, IEEE_RINT, IEEE_SCALB, IEEE_VALUE.
[388:16-17] Replace by
Arguments. The arguments shall be of type real.
Restriction. A program is prohibited from invoking this procedure if
IEEE_SUPPORT_DATATYPE(X) or IEEE_SUPPORT_DATATYPE(Y) has the value false.
Apply the same edits to IEEE_NEXT_AFTER, IEEE_REM, IEEE_UNORDERED.
[393:30-32] Delete "The processor ... it does." And add
Restriction. A program is prohibited from invoking this procedure if
IEEE_SUPPORT_HALTING(FLAG) has the value false.
[393:43-44] Delete these lines and add
Restriction. A program is prohibited from invoking this procedure unless
IEEE_SUPPORT_ROUNDING (ROUND_VALUE,X) is true for some X such that
IEEE_SUPPORT_DATATYPE(X) is true.
[394:44-45] Delete "and such that IEEE_SUPPORT_DATATYPE(X) has the
value true" and add:
Restriction. A program is prohibited from invoking this procedure
with X present if IEEE_SUPPORT_DATATYPE(X) has the value false.
Apply the same edits to IEEE_SUPPORT_DIVIDE, IEEE_SUPPORT_INF,
IEEE_SUPPORT_IO, IEEE_SUPPORT_NAN, IEEE_SUPPORT_SQRT.
[395:1-13] Delete J3 internal note.
[397:22-27] Delete J3 internal note.
4a. IEEE_SUPPORT_ROUNDING does not have a restriction on its argument,
but we think it should.
[398:3+] Add:
Restriction. A program is prohibited from invoking this procedure
with X present if IEEE_SUPPORT_DATATYPE(X) has the value false.
5.
[396:38] Add "Here, support shall include the ability to change the
mode by CALL IEEE_SET_HALTING(FLAG)."
[396:13-28] Delete J3 internal note.
6.
[389:1] Since this is an elemental subroutine, delete "be scalar and".
7.
[392:26] After "small" add "and there is loss of accuracy".
8.
[400:7] To make MATRIX_ERROR sticky and initially false, change line to
LOGICAL :: MATRIX_ERROR = .FALSE.
9.
[419:16-36] Delete these lines. The definition is wrong since the term
is not included in those defined in section 2 of the IEEE standard.
We do not see that it is needed. If deletion is not acceptable, the
definition should be based on 15.2 and reference it.
10.
[419:42-44] Delete these lines. The definition is wrong. The IEEE
standard uses the mathematical symbol. We should remove the few
occurrences of Inf in 15:
[385:21]. Change '+Inf and -Inf' to '+infinity and -infinity'.
[386:39]. Change 'Infinity' to 'infinity'.
[388:20]. Change 'Nan and Inf' to 'a NaN or an infinity'.
[390:36]. Change 'Infinity' to 'infinity'.
[391:16]. Change '-Inf' to '-infinity'.
[399:29]. Change '-Infinity' to '-infinity'.
11.
[421:29-39] Replace by
<> (15.6) A Not-a-Number value of IEEE arithmetic representing
an undefined value or a value created by an invalid operation.
12.
[423:15-22] Replace by
<> The method used in IEEE arithmetic to choose the
result of a floating-point operation that cannot be represented
exactly. There are four modes: nearest, towards zero, up (towards
{\infinity}), and down (towards {-\infinity}).
----- End Included Message -----