Import Upstream version 20180207
[hcoop/debian/mlton.git] / doc / guide / localhost / MLtonIntInf
... / ...
CommitLineData
1<!DOCTYPE html>\r
2<html lang="en">\r
3<head>\r
4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
5<meta name="generator" content="AsciiDoc 8.6.9">\r
6<title>MLtonIntInf</title>\r
7<link rel="stylesheet" href="./asciidoc.css" type="text/css">\r
8<link rel="stylesheet" href="./pygments.css" type="text/css">\r
9\r
10\r
11<script type="text/javascript" src="./asciidoc.js"></script>\r
12<script type="text/javascript">\r
13/*<![CDATA[*/\r
14asciidoc.install();\r
15/*]]>*/\r
16</script>\r
17<link rel="stylesheet" href="./mlton.css" type="text/css">\r
18</head>\r
19<body class="article">\r
20<div id="banner">\r
21<div id="banner-home">\r
22<a href="./Home">MLton 20180207</a>\r
23</div>\r
24</div>\r
25<div id="header">\r
26<h1>MLtonIntInf</h1>\r
27</div>\r
28<div id="content">\r
29<div id="preamble">\r
30<div class="sectionbody">\r
31<div class="listingblock">\r
32<div class="content"><div class="highlight"><pre><span class="k">signature</span><span class="w"> </span><span class="n">MLTON_INT_INF</span><span class="w"> </span><span class="p">=</span><span class="w"></span>\r
33<span class="w"> </span><span class="k">sig</span><span class="w"></span>\r
34<span class="w"> </span><span class="k">type</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">IntInf</span><span class="p">.</span><span class="n">int</span><span class="w"></span>\r
35\r
36<span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">areSmall</span><span class="p">:</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="n">*</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="n">bool</span><span class="w"></span>\r
37<span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">gcd</span><span class="p">:</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="n">*</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="n">t</span><span class="w"></span>\r
38<span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">isSmall</span><span class="p">:</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="n">bool</span><span class="w"></span>\r
39\r
40<span class="w"> </span><span class="k">structure</span><span class="w"> </span><span class="n">BigWord</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">WORD</span><span class="w"></span>\r
41<span class="w"> </span><span class="k">structure</span><span class="w"> </span><span class="n">SmallInt</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">INTEGER</span><span class="w"></span>\r
42<span class="w"> </span><span class="k">datatype</span><span class="w"> </span><span class="n">rep</span><span class="w"> </span><span class="p">=</span><span class="w"></span>\r
43<span class="w"> </span><span class="n">Big</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">BigWord</span><span class="p">.</span><span class="n">word</span><span class="w"> </span><span class="n">vector</span><span class="w"></span>\r
44<span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="n">Small</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">SmallInt</span><span class="p">.</span><span class="n">int</span><span class="w"></span>\r
45<span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">rep</span><span class="p">:</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="n">rep</span><span class="w"></span>\r
46<span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">fromRep</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">rep</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="n">option</span><span class="w"></span>\r
47<span class="w"> </span><span class="k">end</span><span class="w"></span>\r
48</pre></div></div></div>\r
49<div class="paragraph"><p>MLton represents an arbitrary precision integer either as an unboxed\r
50word with the bottom bit set to 1 and the top bits representing a\r
51small signed integer, or as a pointer to a vector of words, where the\r
52first word indicates the sign and the rest are the limbs of a\r
53<a href="GnuMP">GnuMP</a> big integer.</p></div>\r
54<div class="ulist"><ul>\r
55<li>\r
56<p>\r
57<span class="monospaced">type t</span>\r
58</p>\r
59<div class="paragraph"><p>the same as type <span class="monospaced">IntInf.int</span>.</p></div>\r
60</li>\r
61<li>\r
62<p>\r
63<span class="monospaced">areSmall (a, b)</span>\r
64</p>\r
65<div class="paragraph"><p>returns true iff both <span class="monospaced">a</span> and <span class="monospaced">b</span> are small.</p></div>\r
66</li>\r
67<li>\r
68<p>\r
69<span class="monospaced">gcd (a, b)</span>\r
70</p>\r
71<div class="paragraph"><p>uses the <a href="GnuMP">GnuMP&#8217;s</a> fast gcd implementation.</p></div>\r
72</li>\r
73<li>\r
74<p>\r
75<span class="monospaced">isSmall a</span>\r
76</p>\r
77<div class="paragraph"><p>returns true iff <span class="monospaced">a</span> is small.</p></div>\r
78</li>\r
79<li>\r
80<p>\r
81<span class="monospaced">BigWord : WORD</span>\r
82</p>\r
83<div class="paragraph"><p>representation of a big <span class="monospaced">IntInf.int</span> as a vector of words; on 32-bit\r
84platforms, <span class="monospaced">BigWord</span> is likely to be equivalent to <span class="monospaced">Word32</span>, and on\r
8564-bit platforms, <span class="monospaced">BigWord</span> is likely to be equivalent to <span class="monospaced">Word64</span>.</p></div>\r
86</li>\r
87<li>\r
88<p>\r
89<span class="monospaced">SmallInt : INTEGER</span>\r
90</p>\r
91<div class="paragraph"><p>representation of a small <span class="monospaced">IntInf.int</span> as a signed integer; on 32-bit\r
92platforms, <span class="monospaced">SmallInt</span> is likely to be equivalent to <span class="monospaced">Int32</span>, and on\r
9364-bit platforms, <span class="monospaced">SmallInt</span> is likely to be equivalent to <span class="monospaced">Int64</span>.</p></div>\r
94</li>\r
95<li>\r
96<p>\r
97<span class="monospaced">datatype rep</span>\r
98</p>\r
99<div class="paragraph"><p>the underlying representation of an <span class="monospaced">IntInf.int</span>.</p></div>\r
100</li>\r
101<li>\r
102<p>\r
103<span class="monospaced">rep i</span>\r
104</p>\r
105<div class="paragraph"><p>returns the underlying representation of <span class="monospaced">i</span>.</p></div>\r
106</li>\r
107<li>\r
108<p>\r
109<span class="monospaced">fromRep r</span>\r
110</p>\r
111<div class="paragraph"><p>converts from the underlying representation back to an <span class="monospaced">IntInf.int</span>.\r
112If <span class="monospaced">fromRep r</span> is given anything besides the valid result of <span class="monospaced">rep i</span>\r
113for some <span class="monospaced">i</span>, this function call will return <span class="monospaced">NONE</span>.</p></div>\r
114</li>\r
115</ul></div>\r
116</div>\r
117</div>\r
118</div>\r
119<div id="footnotes"><hr></div>\r
120<div id="footer">\r
121<div id="footer-text">\r
122</div>\r
123<div id="footer-badges">\r
124</div>\r
125</div>\r
126</body>\r
127</html>\r