File: AA-3-5-10.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 (181 lines) | stat: -rw-r--r-- 13,833 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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Operations of Fixed 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-9.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-6.html">Next</A></P>
<HR>
<H1> 3.5.10 Operations of Fixed Point Types</H1>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;The following attributes
are defined for every fixed point subtype S: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2/1</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S'Small<DD Class="Hanging">
<A NAME="I1810"></A><A NAME="I1811"></A>{<I><A HREF="defect1.html#8652/0005">8652/0005</A></I>}
S'Small denotes the <I>small</I> of the type of S. The value of this
attribute is of the type <I>universal_real</I>. <A NAME="I1812"></A><A NAME="I1813"></A>Small
may be specified for nonderived<U> ordinary</U> fixed point types via
an <FONT FACE="Arial, Helvetica">attribute_definition_clause</FONT> (see
<A HREF="AA-13-3.html">13.3</A>); the expression of such a clause shall
be static.</DL>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;S'Delta<DD Class="Hanging">
<A NAME="I1814"></A><A NAME="I1815"></A>S'Delta denotes the <I>delta</I>
of the fixed point subtype S. The value of this attribute is of the type
<I>universal_real</I>. </DL>
<DIV Class="Paranum"><FONT SIZE=-2>3.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>The <I>delta</I>
is associated with the <I>sub</I>type as opposed to the type, because
of the possibility of an (obsolescent) <FONT FACE="Arial, Helvetica">delta_constraint</FONT>.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;S'Fore<DD Class="Hanging">
<A NAME="I1816"></A><A NAME="I1817"></A>S'Fore yields the minimum number
of characters needed before the decimal point for the decimal representation
of any value of the subtype S, assuming that the representation does
not include an exponent, but includes a one-character prefix that is
either a minus sign or a space. (This minimum number does not include
superfluous zeros or underlines, and is at least 2.) The value of this
attribute is of the type <I>universal_integer</I>.</DL>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;S'Aft<DD Class="Hanging">
<A NAME="I1818"></A><A NAME="I1819"></A>S'Aft yields the number of decimal
digits needed after the decimal point to accommodate the <I>delta</I>
of the subtype S, unless the <I>delta</I> of the subtype S is greater
than 0.1, in which case the attribute yields the value one. [(S'Aft is
the smallest positive integer N for which (10**N)*S'Delta is greater
than or equal to one.)] The value of this attribute is of the type <I>universal_integer</I>.
</DL>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;The following additional
attributes are defined for every decimal fixed point subtype S: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;S'Digits<DD Class="Hanging">
<A NAME="I1820"></A><A NAME="I1821"></A>S'Digits denotes the <I>digits</I>
of the decimal fixed point subtype S, which corresponds to the number
of decimal digits that are representable in objects of the subtype. The
value of this attribute is of the type <I>universal_integer</I>. Its
value is determined as follows: <A NAME="I1822"></A></DL>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<UL Class="IndentedBulleted"><LI TYPE=DISC>For a first subtype or a subtype defined by a <FONT FACE="Arial, Helvetica">subtype_indication</FONT>
with a <FONT FACE="Arial, Helvetica">digits_constraint</FONT>, the digits
is the value of the expression given after the reserved word <B>digits</B>;</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<UL Class="IndentedBulleted"><LI TYPE=DISC>For a subtype defined by a <FONT FACE="Arial, Helvetica">subtype_indication</FONT>
without a <FONT FACE="Arial, Helvetica">digits_constraint</FONT>, the
digits of the subtype is the same as that of the subtype denoted by the
<FONT FACE="Arial, Helvetica">subtype_mark</FONT> in the <FONT FACE="Arial, Helvetica">subtype_indication</FONT>.
</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>9.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Implementation Note: </B>Although
a decimal subtype can be both range-constrained and digits-constrained,
the digits constraint is intended to control the Size attribute of the
subtype. For decimal types, Size can be important because input/output
of decimal types is so common. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<UL Class="IndentedBulleted"><LI TYPE=DISC>The digits of a base subtype is the largest integer <I>D</I>
such that the range -(10**<I>D</I>-1)*<I>delta</I> .. +(10**<I>D</I>-1)*<I>delta</I>
is included in the base range of the type.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;&nbsp;S'Scale<DD Class="Hanging">
<A NAME="I1823"></A><A NAME="I1824"></A>S'Scale denotes the <I>scale</I>
of the subtype S, defined as the value N such that S'Delta = 10.0**(-N).
<A NAME="I1825"></A>[The scale indicates the position of the point relative
to the rightmost significant digits of values of subtype S.] The value
of this attribute is of the type <I>universal_integer</I>. </DL>
<DIV Class="Paranum"><FONT SIZE=-2>11.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>S'Scale is
negative if S'Delta is greater than one. By contrast, S'Aft is always
positive. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DL Class="Hanging" Style="margin-bottom: 0.4em"><DT>&nbsp;&nbsp;&nbsp;&nbsp;S'Round<DD Class="Hanging">
<A NAME="I1826"></A><A NAME="I1827"></A>S'Round denotes a function with
the following specification: </DL>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="IndentedExamples"><TT><B>function</B>&nbsp;S'Round(<I>X</I>&nbsp;:&nbsp;<I>universal_real</I>)<BR>
&nbsp;&nbsp;<B>return</B>&nbsp;S'Base</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DL Class="Hanging"><DD Class ="Hanging">The function returns the value obtained by rounding
X (away from 0, if X is midway between two values of the type of S).
</DL>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>37&nbsp;&nbsp;All subtypes of a fixed
point type will have the same value for the Delta attribute, in the absence
of <FONT FACE="Arial, Helvetica">delta_constraint</FONT>s (see <A HREF="AA-J-3.html">J.3</A>).</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>38&nbsp;&nbsp;S'Scale is not always
the same as S'Aft for a decimal subtype; for example, if S'Delta = 1.0
then S'Aft is 1 while S'Scale is 0.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>17</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>39&nbsp;&nbsp;<A NAME="I1828"></A>The
predefined operations of a fixed point type include the assignment operation,
qualification, the membership tests, and explicit conversion to and from
other numeric types. They also include the relational operators and the
following predefined arithmetic operators: the binary and unary adding
operators - and +, multiplying operators, and the unary operator <B>abs</B>.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>18</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>40&nbsp;&nbsp;As for all types, objects
of a fixed point type have Size and Address attributes (see <A HREF="AA-13-3.html">13.3</A>).
Other attributes of fixed point types are defined in <A HREF="AA-A-5-4.html">A.5.4</A>.
</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-9.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-6.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>