J.3 Reduced Accuracy Subtypes
This Reference Manual output has not been verified, and may contain omissions or errors. Report any problems on the tracking issue
A digits_constraint
may be used to define a floating point subtype with a new value for its requested decimal precision, as reflected by its Digits attribute. Similarly, a delta_constraint
may be used to define an ordinary fixed point subtype with a new value for its delta, as reflected by its Delta attribute.
It might be more direct to make these attributes specifiable via an attribute_definition_clause
, and eliminate the syntax for these _constraint
s.
Syntax
2/4delta_constraint
::=
delta static_simple_expression
[range_constraint
]
Name Resolution Rules
3/4The simple_expression
of a delta_constraint
is expected to be of any real type.
Legality Rules
4/4The simple_expression
of a delta_constraint
shall be static.
For a subtype_indication
with a delta_constraint
, the subtype_mark
shall denote an ordinary fixed point subtype.
For a subtype_indication
with a digits_constraint
, the subtype_mark
shall denote either a decimal fixed point subtype or a floating point subtype (notwithstanding the rule given in 3.5.9 that only allows a decimal fixed point subtype).
Static Semantics
7/4A subtype_indication
with a subtype_mark
that denotes an ordinary fixed point subtype and a delta_constraint
defines an ordinary fixed point subtype with a delta given by the value of the simple_expression
of the delta_constraint
. If the delta_constraint
includes a range_constraint
, then the ordinary fixed point subtype is constrained by the range_constraint
.
A subtype_indication
with a subtype_mark
that denotes a floating point subtype and a digits_constraint
defines a floating point subtype with a requested decimal precision (as reflected by its Digits attribute) given by the value of the simple_expression
of the digits_constraint
. If the digits_constraint
includes a range_constraint
, then the floating point subtype is constrained by the range_constraint
.
Dynamic Semantics
9/4A delta_constraint
is compatible with an ordinary fixed point subtype if the value of the simple_expression
is no less than the delta of the subtype, and the range_constraint
, if any, is compatible with the subtype.
A digits_constraint
is compatible with a floating point subtype if the value of the simple_expression
is no greater than the requested decimal precision of the subtype, and the range_constraint
, if any, is compatible with the subtype.
The elaboration of a delta_constraint
consists of the elaboration of the range_constraint
, if any.
A numeric subtype is considered “constrained” only if a range constraint applies to it. The only effect of a digits_constraint
or a delta_constraint
without a range_constraint
is to specify the value of the corresponding Digits or Delta attribute in the new subtype. The set of values of the subtype is not “constrained” in any way by such _constraint
s.
Wording Changes from Ada 83
In Ada 83, a delta_constraint
is called a fixed_point_constraint, and a digits_constraint
is called a floating_point_constraint. We have adopted other terms because digits_constraint
s apply primarily to decimal fixed point types now (they apply to floating point types only as an obsolescent feature).
Wording Changes from Ada 2012
Corrigendum: Changed the syntax so that the value following delta in a delta_constraint
is a simple_expression
. This is compatible as any expressions that would require extra parentheses are already illegal. The change is necessary to eliminate syntax ambguities in derived_type_definition
s. The similar change for digits_constraint
is documented in 3.5.9.