CVS difference for ais/ai-00267.txt

Differences between 1.1 and version 1.2
Log of other versions for file ais/ai-00267.txt

--- ais/ai-00267.txt	2001/05/15 04:14:06	1.1
+++ ais/ai-00267.txt	2001/05/26 02:55:11	1.2
@@ -1,4 +1,4 @@
-!standard 4.6 (33)                                    01-05-14  AI95-00267/01
+!standard 4.6 (33)                                    01-05-25  AI95-00267/02
 !standard A.5.3 (00)
 !class amendment 01-05-14
 !status work item 01-05-14
@@ -9,7 +9,7 @@
 
 !summary
 
-An attribute is added to provide high-performance conversions from float types
+An attribute is added to enable high-performance conversions from float types
 to integer types when the exact rounding does not matter.
 
 !problem
@@ -28,46 +28,51 @@
 
 !proposal
 
-The attribute Fast_Round is added to A.5.3.
+The attribute Machine_Rounding is added to A.5.3.
 
 !wording
 
-S'Fast_Round
-      S'Fast_Round denotes a function with the following specification:
-          function S'Fast_Round (X : T) return universal_integer
+S'Machine_Rounding
+      S'Machine_Rounding denotes a function with the following specification:
+          function S'Machine_Rounding (X : T) return T
 
       The function yields the integral value nearest to X. If X lies exactly
-      halfway between two integers, one of those integers is returns, but
-      which of them is returned is unspecified. This function should use
-      whatever rounding is most efficient on the target processor.
+      halfway between two integers, one of those integers is returned, but
+      which of them is returned is unspecified. A zero result has the sign
+      of X when S'Signed_Zeros is True. This function should use whatever
+      rounding is most efficient on the target processor.
 
 !example
 
 !discussion
 
-We considered making the return type of the attribute Integer rather than
-Universal_Integer. Doing so might provide slightly easier code generation
-for some compilers. However, we rejected this idea for three reasons:
-   -- We do not want to encourage the use of the predefined types. Thus, we
-      don't want to force people to use type Integer if they do not want to.
-   -- For compilers which support multiple predefined sizes of integer types,
-      we do not want to require an extra conversion. For a compiler that has
-      a Short_Integer type, an extra check would be required if the attribute
-      was defined to return type Integer. Given that the purpose of this
-      attribute is to improve performance, we do not want to require extra
-      checks. For a compiler that has a Long_Integer type, it would not be
-      possible to do a fast conversion into the full range of that type.
-   -- The other attributes in A.5.3 generally have parameters and results
-      of type Universal_Integer.
-
-The rounding of Fast_Round is purposely left unspecified. It is not intended
-that users depend on the actual rounding used. (If they need a specific mode
-of rounding, one of the other rounding attributes should be used). If we had
-said that the rounding was implementation-defined, we would be requiring
-documentation of the rounding used, which potentially would encourage users
-to depend on a particular rounding.
+We considered making the return type of the attribute Integer or
+Universal_Integer, but these would be inconsistent with the other rounding
+attributes defined in A.5.3.
+
+The intended use of this attribute is in a type conversion to some integer
+type:
+
+      Some_Integer(Some_Float'Machine_Rounding(X))
+
+Implementations should detect this case to generate fast code for the
+conversion of X to Some_Integer. In particular, the usual Float to Integer
+type conversion rounding code is not necessary, as the value has already been
+rounded. (This probably applies to all of the rounding and trunctation
+attributes defined in A.5.3).
+
+The rounding of Machine_Rounding is purposely left unspecified. It is not
+intended that users depend on the actual rounding used. (If they need a
+specific mode of rounding, one of the other rounding attributes should be
+used). If we had said that the rounding was implementation-defined, we would
+be requiring documentation of the rounding used, which potentially would
+encourage users to depend on a particular rounding.
 
 !ACATS test
+
+Create a C-Test to check for the existence of this attribute. (It can't be
+a test case for CXA5015, as this is an amendment, and will probably not be
+required for years.)
 
 !appendix
 

Questions? Ask the ACAA Technical Agent