# 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/4`delta_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.