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 -----