File: AA-3-5-7.html

package info (click to toggle)
ada-reference-manual 20021112web-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny, sarge
  • size: 18,652 kB
  • ctags: 8,921
  • sloc: makefile: 52; sh: 20
file content (295 lines) | stat: -rw-r--r-- 21,534 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Floating Point Types</TITLE>
    <META NAME="Author" CONTENT="JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor">
    <META NAME="GENERATOR" CONTENT="Arm_Form.Exe, Ada Reference Manual generator">
    <STYLE type="text/css">
    DIV.paranum {position: absolute; font-family: Arial, Helvetica, sans-serif; left: 0.5 em; top: auto}
    TT {font-family: "Courier New", monospace}
    DT {display: compact}
    DIV.Normal {font-family: "Times New Roman", Times, serif; margin-bottom: 0.6em}
    DIV.Wide {font-family: "Times New Roman", Times, serif; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Annotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.WideAnnotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Index {font-family: "Times New Roman", Times, serif}
    DIV.SyntaxSummary {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Notes {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.NotesHeader {font-family: "Times New Roman", Times, serif; margin-left: 2.0em}
    DIV.SyntaxIndented {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Indented {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-bottom: 0.6em}
    DIV.CodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.SmallIndented {font-family: "Times New Roman", Times, serif; margin-left:  10.0em; margin-bottom: 0.6em}
    DIV.SmallCodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.Examples {font-family: "Courier New", monospace; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.SmallExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 7.5em; margin-bottom: 0.6em}
    DIV.IndentedExamples {font-family: "Courier New", monospace; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.SmallIndentedExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left:  15.0em; margin-bottom: 0.6em}
    UL.Bulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.IndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.Hanging {font-family: "Times New Roman", Times, serif; margin-top: 0em; margin-bottom: 0.6em}
    DD.Hanging {margin-left: 6.0em}
    DL.IndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.IndentedHanging {margin-left: 2.0em}
    DL.HangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.HangingInBulleted {margin-left: 4.0em}
    DL.SmallHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallHanging {margin-left: 7.5em}
    DL.SmallIndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallIndentedHanging {margin-left: 2.0em}
    DL.SmallHangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallHangingInBulleted {margin-left: 5.0em}
    DL.Enumerated {font-family: "Times New Roman", Times, serif; margin-right: 0.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.Enumerated {margin-left: 2.0em}
    DL.SmallEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallEnumerated {margin-left: 2.5em}
    DL.NestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.SmallNestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    </STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFF0" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-5-6.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-5-8.html">Next</A></P>
<HR>
<H1> 3.5.7 Floating Point Types</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I1735"></A>For floating point types,
the error bound is specified as a relative precision by giving the required
minimum number of significant decimal digits. </DIV>

<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">floating_point_definition<A NAME="I1736"></A>
::= </FONT><BR>
&nbsp;&nbsp;<B>digits</B>&nbsp;<I>static_</I><A NAME="I1737"></A><FONT FACE="Arial, Helvetica">expression</FONT>&nbsp;[<A NAME="I1738"></A><FONT FACE="Arial, Helvetica">real_range_specification</FONT>]</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">real_range_specification<A NAME="I1739"></A>
::= </FONT><BR>
&nbsp;&nbsp;<B>range</B>&nbsp;<I>static_</I><A NAME="I1740"></A><FONT FACE="Arial, Helvetica">simple_expression</FONT>&nbsp;..&nbsp;<I>static_</I><A NAME="I1741"></A><FONT FACE="Arial, Helvetica">simple_expression</FONT></DIV>

<H4 ALIGN=CENTER>Name Resolution Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I1742"></A>The <I>requested decimal precision</I>,
which is the minimum number of significant decimal digits required for
the floating point type, is specified by the value of the <FONT FACE="Arial, Helvetica">expression</FONT>
given after the reserved word <B>digits</B>. <A NAME="I1743"></A>This
<FONT FACE="Arial, Helvetica">expression</FONT> is expected to be of
any integer type.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I1744"></A>Each <FONT FACE="Arial, Helvetica">simple_expression</FONT>
of a <FONT FACE="Arial, Helvetica">real_range_specification</FONT> is
expected to be of any real type[; the types need not be the same]. </DIV>

<H4 ALIGN=CENTER>Legality Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I1745"></A>The requested decimal precision
shall be specified by a static <FONT FACE="Arial, Helvetica">expression</FONT>
whose value is positive and no greater than System.Max_Base_Digits. Each
<FONT FACE="Arial, Helvetica">simple_expression</FONT> of a <FONT FACE="Arial, Helvetica">real_range_specification</FONT>
shall also be static. <A NAME="I1746"></A>If the <FONT FACE="Arial, Helvetica">real_range_specification</FONT>
is omitted, the requested decimal precision shall be no greater than
System.Max_Digits. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>We have added Max_Base_Digits
to package System. It corresponds to the requested decimal precision
of <I>root_real</I>. System.Max_Digits corresponds to the maximum value
for Digits that may be specified in the absence of a <FONT FACE="Arial, Helvetica">real_range_specification</FONT>,
for upward compatibility. These might not be the same if <FONT FACE="Arial, Helvetica">root_real</FONT>
has a base range that does not include &plusmn; 10.0**(4*Max_Base_Digits).
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;A <FONT FACE="Arial, Helvetica">floating_point_definition</FONT>
is illegal if the implementation does not support a floating point type
that satisfies the requested decimal precision and range. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Implementation defined: </B>What
combinations of requested decimal precision and range are supported for
floating point types.</FONT></DIV>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;The set of values for a floating point type is
the (infinite) set of rational numbers. <A NAME="I1747"></A>The <I>machine
numbers</I> of a floating point type are the values of the type that
can be represented exactly in every unconstrained variable of the type.
<A NAME="I1748"></A>The base range (see <A HREF="AA-3-5.html">3.5</A>)
of a floating point type is symmetric around zero, except that it can
include some extra negative values in some implementations.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Implementation Note: </B>For
example, if a 2's complement representation is used for the mantissa
rather than a sign-mantissa or 1's complement representation, then there
is usually one extra negative machine number.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>To be honest: </B>If the Signed_Zeros
attribute is True, then minus zero could in a sense be considered a value
of the type. However, for most purposes, minus zero behaves the same
as plus zero.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I1749"></A>The <I>base decimal precision</I>
of a floating point type is the number of decimal digits of precision
representable in objects of the type. <A NAME="I1750"></A>The <I>safe
range</I> of a floating point type is that part of its base range for
which the accuracy corresponding to the base decimal precision is preserved
by all predefined operations. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Implementation Note: </B>In
most cases, the safe range and base range are the same. However, for
some hardware, values near the boundaries of the base range might result
in excessive inaccuracies or spurious overflows when used with certain
predefined operations. For such hardware, the safe range would omit such
values.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1751"></A>A <FONT FACE="Arial, Helvetica">floating_point_definition</FONT>
defines a floating point type whose base decimal precision is no less
than the requested decimal precision. <A NAME="I1752"></A><A NAME="I1753"></A>If
a <FONT FACE="Arial, Helvetica">real_range_specification</FONT> is given,
the safe range of the floating point type (and hence, also its base range)
includes at least the values of the simple expressions given in the <FONT FACE="Arial, Helvetica">real_range_specification</FONT>.
If a <FONT FACE="Arial, Helvetica">real_range_specification</FONT> is
not given, the safe (and base) range of the type includes at least the
values of the range -10.0**(4*D) .. +10.0**(4*D) where D is the requested
decimal precision. [The safe range might include other values as well.
The attributes Safe_First and Safe_Last give the actual bounds of the
safe range.]</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;A <FONT FACE="Arial, Helvetica">floating_point_definition</FONT>
also defines a first subtype of the type. <A NAME="I1754"></A><A NAME="I1755"></A>If
a <FONT FACE="Arial, Helvetica">real_range_specification</FONT> is given,
then the subtype is constrained to a range whose bounds are given by
a conversion of the values of the <FONT FACE="Arial, Helvetica">simple_expression</FONT>s
of the <FONT FACE="Arial, Helvetica">real_range_specification</FONT>
to the type being defined. Otherwise, the subtype is unconstrained.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11.a.1/1</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>To be honest: </B><U>The conversion
mentioned above is not an <I>implicit subtype conversion</I> (which is
something that happens at overload resolution, see <A HREF="AA-4-6.html">4.6</A>),
although it happens implicitly. Therefore, the freezing rules are not
invoked on the type (which is important so that representation items
can be given for the type). <A NAME="I1756"></A></U></FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1757"></A>There is a predefined, unconstrained,
floating point subtype named Float[, declared in the visible part of
package Standard]. </DIV>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1758"></A>[The elaboration of a <FONT FACE="Arial, Helvetica">floating_point_definition</FONT>
creates the floating point type and its first subtype.] </DIV>

<H4 ALIGN=CENTER>Implementation Requirements</H4>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1759"></A>In an implementation that
supports floating point types with 6 or more digits of precision, the
requested decimal precision for Float shall be at least 6.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1760"></A>If Long_Float is predefined
for an implementation, then its requested decimal precision shall be
at least 11. </DIV>

<H4 ALIGN=CENTER>Implementation Permissions</H4>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1761"></A><A NAME="I1762"></A>An implementation
is allowed to provide additional predefined floating point types[, declared
in the visible part of Standard], whose (unconstrained) first subtypes
have names of the form Short_Float, Long_Float, Short_Short_Float, Long_Long_Float,
etc. Different predefined floating point types are allowed to have the
same base decimal precision. However, the precision of Float should be
no greater than that of Long_Float. Similarly, the precision of Short_Float
(if provided) should be no greater than Float. Corresponding recommendations
apply to any other predefined floating point types. There need not be
a named floating point type corresponding to each distinct base decimal
precision supported by an implementation. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Implementation defined: </B>The
predefined floating point types declared in Standard.</FONT></DIV>

<H4 ALIGN=CENTER>Implementation Advice</H4>
<DIV Class="Paranum"><FONT SIZE=-2>17</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I1763"></A>An implementation should
support Long_Float in addition to Float if the target machine supports
11 or more digits of precision. No other named floating point subtypes
are recommended for package Standard. Instead, appropriate named floating
point subtypes should be provided in the library package Interfaces (see
<A HREF="AA-B-2.html">B.2</A>). </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>17.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Implementation Note: </B>To
promote portability, implementations should explicitly declare the floating
point (sub)types Float and Long_Float in Standard, and leave other predefined
float types anonymous. For implementations that already support Short_Float,
etc., upward compatibility argues for keeping such declarations in Standard
during the transition period, but perhaps generating a warning on use.
A separate package Interfaces in the predefined environment is available
for pre-declaring types such as Float_32, IEEE_Float_64, etc. See <A HREF="AA-B-2.html">B.2</A>.
</FONT></DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>18</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>33&nbsp;&nbsp;If a floating point subtype
is unconstrained, then assignments to variables of the subtype involve
only Overflow_Checks, never Range_Checks. </FONT></DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>19</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Examples of
floating point types and subtypes:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>20</FONT></DIV>
<DIV Class="Examples"><TT><B>type</B>&nbsp;Coefficient&nbsp;<B>is</B>&nbsp;<B>digits</B>&nbsp;10&nbsp;<B>range</B>&nbsp;-1.0&nbsp;..&nbsp;1.0;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>21</FONT></DIV>
<DIV Class="Examples"><TT><B>type</B>&nbsp;Real&nbsp;<B>is</B>&nbsp;<B>digits</B>&nbsp;8;<BR>
<B>type</B>&nbsp;Mass&nbsp;<B>is</B>&nbsp;<B>digits</B>&nbsp;7&nbsp;<B>range</B>&nbsp;0.0&nbsp;..&nbsp;1.0E35;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>22</FONT></DIV>
<DIV Class="Examples"><TT><B>subtype</B>&nbsp;Probability&nbsp;<B>is</B>&nbsp;Real&nbsp;<B>range</B>&nbsp;0.0&nbsp;..&nbsp;1.0;&nbsp;&nbsp;&nbsp;<I>--&nbsp;&nbsp;&nbsp;a&nbsp;subtype&nbsp;with&nbsp;a&nbsp;smaller&nbsp;range</I></TT></DIV>

<H4 ALIGN=CENTER>Inconsistencies With Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>22.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I1764"></A>No Range_Checks,
only Overflow_Checks, are performed on variables (or parameters) of an
unconstrained floating point subtype. This is upward compatible for programs
that do not raise Constraint_Error. For those that do raise Constraint_Error,
it is possible that the exception will be raised at a later point, or
not at all, if extended range floating point registers are used to hold
the value of the variable (or parameter). </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>22.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>This change was
felt to be justified by the possibility of improved performance on machines
with extended-range floating point registers. An implementation need
not take advantage of this relaxation in the range checking; it can hide
completely the use of extended range registers if desired, presumably
at some run-time expense. </FONT></DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>22.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The syntax rules for <FONT FACE="Arial, Helvetica">floating_point_constraint</FONT>
and <FONT FACE="Arial, Helvetica">floating_accuracy_definition</FONT>
are removed. The syntax rules for <FONT FACE="Arial, Helvetica">floating_point_definition</FONT>
and <FONT FACE="Arial, Helvetica">real_range_specification</FONT> are
new.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>22.d</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>A syntax rule for <FONT FACE="Arial, Helvetica">digits_constraint</FONT>
is given in <A HREF="AA-3-5-9.html">3.5.9</A>, ``<A HREF="AA-3-5-9.html">Fixed
Point Types</A>''. In <A HREF="AA-J-3.html">J.3</A> we indicate that
a <FONT FACE="Arial, Helvetica">digits_constraint</FONT> may be applied
to a floating point <FONT FACE="Arial, Helvetica">subtype_mark</FONT>
as well (to be compatible with Ada 83's <FONT FACE="Arial, Helvetica">floating_point_constraint</FONT>).</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>22.e</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Discussion of model numbers is
postponed to <A HREF="AA-3-5-8.html">3.5.8</A> and <A HREF="AA-G-2.html">G.2</A>.
The concept of safe numbers has been replaced by the concept of the safe
range of values. The bounds of the safe range are given by T'Safe_First
.. T'Safe_Last, rather than -T'Safe_Large .. T'Safe_Large, since on some
machines the safe range is not perfectly symmetric. The concept of machine
numbers is new, and is relevant to the definition of Succ and Pred for
floating point numbers. </FONT></DIV>

<HR>
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-5-6.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-5-8.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>