Skip to main content

J.3 Reduced Accuracy Subtypes

danger

This Reference Manual output has not been verified, and may contain omissions or errors. Report any problems on the tracking issue

1

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.

1.a
discussion

It might be more direct to make these attributes specifiable via an attribute_definition_clause, and eliminate the syntax for these _constraints.

Syntax

2/4

delta_constraint ::= delta static_simple_expression [range_constraint]

Name Resolution Rules

3/4

The simple_expression of a delta_constraint is expected to be of any real type.

Legality Rules

4/4

The simple_expression of a delta_constraint shall be static.

5

For a subtype_indication with a delta_constraint, the subtype_mark shall denote an ordinary fixed point subtype.

6

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

6.a/2
This paragraph was deleted.

Static Semantics

7/4

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

8/4

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

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

10/4

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.

11

The elaboration of a delta_constraint consists of the elaboration of the range_constraint, if any.

11.a
reason

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

Wording Changes from Ada 83

11.b

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_constraints apply primarily to decimal fixed point types now (they apply to floating point types only as an obsolescent feature).

Wording Changes from Ada 2012

11.c/4

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_definitions. The similar change for digits_constraint is documented in 3.5.9.