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> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-3-5-9.html">Previous</A> <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"> 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> 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> 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> 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> 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"> 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> 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> 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> 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> S'Round(<I>X</I> : <I>universal_real</I>)<BR>
<B>return</B> 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 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 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 <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 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> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-3-5-9.html">Previous</A> <A HREF="AA-3-6.html">Next</A> <A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>
|