TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

- (1)
- The following representation-oriented attributes are defined for every subtype S of a floating point type T.
- (2)
- S'Machine_Radix
- Yields the radix of the hardware representation of the type
T. The value of this attribute is of the type universal_integer.

- (3)
- The values of other representation-oriented attributes of a floating
point subtype, and of the ``primitive function'' attributes of a floating
point subtype described later, are defined in terms of a particular
representation of nonzero values called the canonical form. The canonical
form (for the type T) is the form
+/-mantissa*T'Machine_Radix**exponent

- where
- (4)
- mantissa is a fraction in the number base T'Machine_Radix, the first digit of which is nonzero, and

- (5)
- exponent is an integer.

- (6)
- S'Machine_Mantissa
- Yields the largest value of p such that every value
expressible in the canonical form (for the type T), having a
p-digit mantissa and an exponent between T'Machine_Emin and
T'Machine_Emax, is a machine number (see 3.5.7) of the type
T. This attribute yields a value of the type universal_integer.

- (7)
- S'Machine_Emin
- Yields the smallest (most negative) value of exponent such
that every value expressible in the canonical form (for the
type T), having a mantissa of T'Machine_Mantissa digits, is a
machine number (see 3.5.7) of the type T. This attribute
yields a value of the type universal_integer.

- (8)
- S'Machine_Emax
- Yields the largest (most positive) value of exponent such
that every value expressible in the canonical form (for the
type T), having a mantissa of T'Machine_Mantissa digits, is a
machine number (see 3.5.7) of the type T. This attribute
yields a value of the type universal_integer.

- (9)
- S'Denorm
- Yields the value True if every value expressible in the form

+/-mantissa*T'Machine_Radix**T'Machine_Emin

- where mantissa is a nonzero T'Machine_Mantissa-digit fraction
in the number base T'Machine_Radix, the first digit of which
is zero, is a machine number (see 3.5.7) of the type T;
yields the value False otherwise. The value of this
attribute is of the predefined type Boolean.

- (10)
- The values described by the formula in the definition of S'Denorm are called denormalized numbers. A nonzero machine number that is not a denormalized number is a normalized number. A normalized number x of a given type T is said to be represented in canonical form when it is expressed in the canonical form (for the type T) with a mantissa having T'Machine_Mantissa digits; the resulting form is the canonical-form representation of x.
- (11)
- S'Machine_Rounds
- Yields the value True if rounding is performed on inexact
results of every predefined operation that yields a result of
the type T; yields the value False otherwise. The value of
this attribute is of the predefined type Boolean.

- (12)
- S'Machine_Overflows
- Yields the value True if overflow and divide-by-zero are
detected and reported by raising Constraint_Error for every
predefined operation that yields a result of the type T;
yields the value False otherwise. The value of this
attribute is of the predefined type Boolean.

- (13)
- S'Signed_Zeros
- Yields the value True if the hardware representation for the
type T has the capability of representing both positively and
negatively signed zeros, these being generated and used by
the predefined operations of the type T as specified in IEC
559:1989; yields the value False otherwise. The value of
this attribute is of the predefined type Boolean.

- (14)
- For every value x of a floating point type T, the normalized exponent of x is defined as follows:
- (15)
- the normalized exponent of zero is (by convention) zero;

- (16)
- for nonzero x, the normalized exponent of x is the unique integer k such that T'Machine_Radix**(k-1) <= |x| < T'Machine_Radix**k.

- (17)
- The following primitive function attributes are defined for any subtype S of a floating point type T.
- (18)
- S'Exponent
- S'Exponent denotes a function with the following specification:

(19) function S'Exponent (X : T) return universal_integer

- (20)
- The function yields the normalized exponent of X.

- (21)
- S'Fraction
- S'Fraction denotes a function with the following specification:

(22) function S'Fraction (X : T) return T

- (23)
- The function yields the value X*T'Machine_Radix**(-k), where
k is the normalized exponent of X. A zero result, which can
only occur when X is zero, has the sign of X.

- (24)
- S'Compose
- S'Compose denotes a function with the following specification:

(25) function S'Compose (Fraction : T; Exponent : universal_integer) return T

- (26)
- Let v be the value Fraction*T'Machine_Radix**(Exponent-k),
where k is the normalized exponent of Fraction. If v is a
machine number of the type T, or if |v|>=T'Model_Small, the
function yields v; otherwise, it yields either one of the
machine numbers of the type T adjacent to v. Constraint_Error is optionally raised if v is outside the base range of
S. A zero result has the sign of Fraction when S'Signed_Zeros
is True.

- (27)
- S'Scaling
- S'Scaling denotes a function with the following specification:

(28) function S'Scaling (X : T; Adjustment : universal_integer) return T

- (29)
- Let v be the value X*T'Machine_Radix**Adjustment. If v is
a machine number of the type T, or if |v|>=T'Model_Small, the
function yields v; otherwise, it yields either one of the
machine numbers of the type T adjacent to v. Constraint_Error is optionally raised if v is outside the base range of
S. A zero result has the sign of X when S'Signed_Zeros is
True.

- (30)
- S'Floor
- S'Floor denotes a function with the following specification:

(31) function S'Floor (X : T) return T

- (32)
- The function yields the value Floor(X), i.e., the
largest (most positive) integral value less than or equal to
X. When X is zero, the result has the sign of X; a zero
result otherwise has a positive sign.

- (33)
- S'Ceiling
- S'Ceiling denotes a function with the following specification:

(34) function S'Ceiling (X : T) return T

- (35)
- The function yields the value Ceiling(X), i.e., the
smallest (most negative) integral value greater than or equal
to X. When X is zero, the result has the sign of X; a zero
result otherwise has a negative sign when S'Signed_Zeros is
True.

- (36)
- S'Rounding
- S'Rounding denotes a function with the following specification:

(37) function S'Rounding (X : T) return T

- (38)
- The function yields the integral value nearest to X,
rounding away from zero if X lies exactly halfway between two
integers. A zero result has the sign of X when S'Signed_Zeros is True.

- (39)
- S'Unbiased_Rounding
- S'Unbiased_Rounding denotes a function with the following
specification:

(40) function S'Unbiased_Rounding (X : T) return T

- (41)
- The function yields the integral value nearest to X,
rounding toward the even integer if X lies exactly halfway
between two integers. A zero result has the sign of X when
S'Signed_Zeros is True.

- (42)
- S'Truncation
- S'Truncation denotes a function with the following
specification:

(43) function S'Truncation (X : T) return T

- (44)
- The function yields the value Ceiling(X) when X is
negative, and Floor(X) otherwise. A zero result has the sign
of X when S'Signed_Zeros is True.

- (45)
- S'Remainder
- S'Remainder denotes a function with the following
specification:

(46) function S'Remainder (X, Y : T) return T

- (47)
- For nonzero Y, let v be the value X-n*Y, where n is the
integer nearest to the exact value of X/Y; if |n-X/Y|=1/2,
then n is chosen to be even. If v is a machine number of the
type T, the function yields v; otherwise, it yields zero.
Constraint_Error is raised if Y is zero. A zero result has
the sign of X when S'Signed_Zeros is True.

- (48)
- S'Adjacent
- S'Adjacent denotes a function with the following specification:

(49) function S'Adjacent (X, Towards : T) return T

- (50)
- If Towards=X, the function yields X; otherwise, it
yields the machine number of the type T adjacent to X in the
direction of Towards, if that machine number exists. If the
result would be outside the base range of S, Constraint_Error
is raised. When T'Signed_Zeros is True, a zero result has
the sign of X. When Towards is zero, its sign has no bearing
on the result.

- (51)
- S'Copy_Sign
- S'Copy_Sign denotes a function with the following
specification:

(52) function S'Copy_Sign (Value, Sign : T) return T

- (53)
- If the value of Value is nonzero, the function yields a
result whose magnitude is that of Value and whose sign is
that of Sign; otherwise, it yields the value zero.
Constraint_Error is optionally raised if the result is
outside the base range of S. A zero result has the sign of
Sign when S'Signed_Zeros is True.

- (54)
- S'Leading_Part
- S'Leading_Part denotes a function with the following
specification:

(55) function S'Leading_Part (X : T; Radix_Digits : universal_integer) return T

- (56)
- Let v be the value T'Machine_Radix**(k-Radix_Digits), where
k is the normalized exponent of X. The function yields the
value

- (57)
- Floor(X/v)*v, when X is nonnegative and Radix_Digits is positive;

- (58)
- Ceiling(X/v)*v, when X is negative and Radix_Digits is positive.

- (59)
- Constraint_Error is raised when Radix_Digits is zero or
negative. A zero result, which can only occur when X is
zero, has the sign of X.

- (60)
- S'Machine
- S'Machine denotes a function with the following specification:

(61) function S'Machine (X : T) return T

- (62)
- If X is a machine number of the type T, the function
yields X; otherwise, it yields the value obtained by rounding
or truncating X to either one of the adjacent machine numbers
of the type T. Constraint_Error is raised if rounding or
truncating X to the precision of the machine numbers results
in a value outside the base range of S. A zero result has the
sign of X when S'Signed_Zeros is True.

- (63)
- The following model-oriented attributes are defined for any subtype S of a floating point type T.
- (64)
- S'Model_Mantissa
- If the Numerics Annex is not supported, this attribute yields
an implementation defined value that is greater than or equal
to Ceiling(d*log (10)/log (T'Machine_Radix))+1, where d is
the requested decimal precision of T, and less than or equal
to the value of T'Machine_Mantissa. See G.2.2 for further
requirements that apply to implementations supporting the
Numerics Annex. The value of this attribute is of the type
universal_integer.

- (65)
- S'Model_Emin
- If the Numerics Annex is not supported, this attribute yields
an implementation defined value that is greater than or equal
to the value of T'Machine_Emin. See G.2.2 for further
requirements that apply to implementations supporting the
Numerics Annex. The value of this attribute is of the type
universal_integer.

- (66)
- S'Model_Epsilon
- Yields the value T'Machine_Radix**(1-T'Model_Mantissa). The
value of this attribute is of the type universal_real.

- (67)
- S'Model_Small
- Yields the value T'Machine_Radix**(T'Model_Emin-1). The value of
this attribute is of the type universal_real.

- (68)
- S'Model
- S'Model denotes a function with the following specification:

(69) function S'Model (X : T) return T

- (70)
- If the Numerics Annex is not supported, the meaning of
this attribute is implementation defined; see G.2.2 for the
definition that applies to implementations supporting the
Numerics Annex.

- (71)
- S'Safe_First
- Yields the lower bound of the safe range (see 3.5.7) of the
type T. If the Numerics Annex is not supported, the value of
this attribute is implementation defined; see G.2.2 for the
definition that applies to implementations supporting the
Numerics Annex. The value of this attribute is of the type
universal_real.

- (72)
- S'Safe_Last
- Yields the upper bound of the safe range (see 3.5.7) of the
type T. If the Numerics Annex is not supported, the value of
this attribute is implementation defined; see G.2.2 for the
definition that applies to implementations supporting the
Numerics Annex. The value of this attribute is of the type
universal_real.

TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

-- Email comments, additions, corrections, gripes, kudos, etc. to:

Magnus Kempe -- Magnus.Kempe@di.epfl.chCopyright statement

Page last generated: 95-03-12