NumericAnnex/docsets/NumericAnnex.docset/Contents/Resources/Documents/Protocols/PRNG.html

825 lines
51 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>PRNG Protocol Reference</title>
<link rel="stylesheet" type="text/css" href="../css/highlight.css">
<link rel="stylesheet" type="text/css" href="../css/jazzy.css">
<script src="../js/jquery.min.js" defer></script>
<script src="../js/jazzy.js" defer></script>
</head>
<body>
<a name="//apple_ref/swift/Protocol/PRNG" class="dashAnchor"></a>
<a title="PRNG Protocol Reference"></a>
<header>
<p class="primary">
<a href="../index.html">NumericAnnex Reference</a>
(100% documented)
</p>
<p>
<a href="https://github.com/xwu/NumericAnnex">View on GitHub</a>
</p>
<p>
<a href="dash-feed://https%3A%2F%2Fxwu%2Egithub%2Eio%2FNumericAnnex%2Fdocsets%2FNumericAnnex%2Exml">Install in Dash</a>
</p>
</header>
<div class="wrapper">
<nav>
<ul>
<li>
<p><a href="../Classes.html">Classes</a></p>
<ul>
<li>
<a href="../Classes/Random.html">Random</a>
</li>
<li>
<a href="../Classes/Random/Xoroshiro.html"> Xoroshiro</a>
</li>
</ul>
</li>
<li>
<p><a href="../Extensions.html">Extensions</a></p>
<ul>
<li>
<a href="../Extensions/BinaryInteger.html">BinaryInteger</a>
</li>
<li>
<a href="../Extensions/Double.html">Double</a>
</li>
<li>
<a href="../Extensions/Float.html">Float</a>
</li>
<li>
<a href="../Extensions/FloatingPoint.html">FloatingPoint</a>
</li>
<li>
<a href="../Extensions/UnsignedInteger.html">UnsignedInteger</a>
</li>
</ul>
</li>
<li>
<p><a href="../Functions.html">Functions</a></p>
<ul>
<li>
<a href="../Functions.html#/s:12NumericAnnex3absAA7ComplexVyxGAeA4RealRzs9DecodableRzs9EncodableRzs33_ExpressibleByBuiltinFloatLiteralRzlF">abs(_:)</a>
</li>
<li>
<a href="../Functions.html#/s:12NumericAnnex3absAA8RationalVyxGAEs9DecodableRzs9EncodableRzs13SignedIntegerRzs021_ExpressibleByBuiltinH7LiteralRzs08UnsignedH09Magnitudes0A0PRpzAkM_AKQZANRSlF">abs(_:)</a>
</li>
<li>
<a href="../Functions.html#/s:12NumericAnnex4ceilAA8RationalVyxGAEs9DecodableRzs9EncodableRzs13SignedIntegerRzs021_ExpressibleByBuiltinH7LiteralRzs08UnsignedH09Magnitudes0A0PRpzAkM_AKQZANRSlF">ceil(_:)</a>
</li>
<li>
<a href="../Functions.html#/s:12NumericAnnex5floorAA8RationalVyxGAEs9DecodableRzs9EncodableRzs13SignedIntegerRzs021_ExpressibleByBuiltinH7LiteralRzs08UnsignedH09Magnitudes0A0PRpzAkM_AKQZANRSlF">floor(_:)</a>
</li>
<li>
<a href="../Functions.html#/s:12NumericAnnex5roundAA8RationalVyxGAEs9DecodableRzs9EncodableRzs13SignedIntegerRzs021_ExpressibleByBuiltinH7LiteralRzs08UnsignedH09Magnitudes0A0PRpzAkM_AKQZANRSlF">round(_:)</a>
</li>
<li>
<a href="../Functions.html#/s:12NumericAnnex4sqrtAA7ComplexVyxGAeA4RealRzs9DecodableRzs9EncodableRzs33_ExpressibleByBuiltinFloatLiteralRzlF">sqrt(_:)</a>
</li>
<li>
<a href="../Functions.html#/s:12NumericAnnex5truncAA8RationalVyxGAEs9DecodableRzs9EncodableRzs13SignedIntegerRzs021_ExpressibleByBuiltinH7LiteralRzs08UnsignedH09Magnitudes0A0PRpzAkM_AKQZANRSlF">trunc(_:)</a>
</li>
</ul>
</li>
<li>
<p><a href="../Protocols.html">Protocols</a></p>
<ul>
<li>
<a href="../Protocols/Math.html">Math</a>
</li>
<li>
<a href="../Protocols/PRNG.html">PRNG</a>
</li>
<li>
<a href="../Protocols/Real.html">Real</a>
</li>
</ul>
</li>
<li>
<p><a href="../Structs.html">Structs</a></p>
<ul>
<li>
<a href="../Structs/Complex.html">Complex</a>
</li>
<li>
<a href="../Structs/Rational.html">Rational</a>
</li>
</ul>
</li>
<li>
<p><a href="../Typealiases.html">Typealiases</a></p>
<ul>
<li>
<a href="../Typealiases.html#/s:12NumericAnnex12RoundingRulea">RoundingRule</a>
</li>
<li>
<a href="../Typealiases.html#/s:12NumericAnnex4Signa">Sign</a>
</li>
</ul>
</li>
</ul>
</nav>
<article>
<section>
<div class="wrapper">
<div class="overview">
<h1>PRNG</h1>
<div class="declaration">
<div class="language">
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">protocol</span> <span class="kt">PRNG</span> <span class="p">:</span> <span class="kd">class</span><span class="p">,</span> <span class="kt">IteratorProtocol</span><span class="p">,</span> <span class="kt">Sequence</span>
<span class="k">where</span> <span class="kt">Element</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span><span class="p">,</span>
<span class="kt">SubSequence</span> <span class="p">:</span> <span class="kt">Sequence</span><span class="p">,</span>
<span class="kt">Element</span> <span class="o">==</span> <span class="kt">SubSequence</span><span class="o">.</span><span class="kt">Element</span></code></pre>
</div>
</div>
<p>A pseudo-random number generator (PRNG).</p>
<p>Reference types that conform to <code>PRNG</code> are infinite sequences of
pseudo-random elements. Protocol extension methods iterate over such a
sequence as necessary to generate pseudo-random values from the desired
distribution.</p>
<h2 id='considerations-for-conforming-types' class='heading'>Considerations for Conforming Types</h2>
<p>For clarity to end users, custom PRNGs may be implemented in an extension to
<code><a href="../Classes/Random.html">Random</a></code>. For instance, the <code>xoroshiro128+</code> algorithm is implemented in a
final class named <code><a href="../Classes/Random/Xoroshiro.html">Random.Xoroshiro</a></code>.</p>
<p>The static methods <code>_entropy(_:)</code> and <code>_entropy(_:count:)</code> return
cryptographically secure random bytes that may be useful for seeding your
custom PRNG. However, these methods may return <code>nil</code> if the requested number
of random bytes is not available, and they are not recommended as a routine
source of random data.</p>
<h2 id='adding-other-probability-distributions' class='heading'>Adding Other Probability Distributions</h2>
<p>Many built-in protocol extension methods make use of the primitive,
overloaded method <code>_random(_:bitCount:)</code>. You may wish to use the same
method in new protocol extension methods that return pseudo-random
values from other probability distributions.</p>
<p>The method <code>_random(_:bitCount:)</code> generates uniformly distributed binary
floating-point values in the half-open range [0, 1) with a precision of
either <code>bitCount</code> or the significand bit count of the floating-point type,
whichever is less. Additionally, this method generates uniformly distributed
unsigned integers in the half-open range [0, 2 ** <em>x</em>), where ** is the
exponentiation operator and <em>x</em> is the lesser of <code>bitCount</code> and the bit
width of the integer type.</p>
<p>For end users, however, the recommended spelling for a uniformly distributed
numeric value is <code>uniform()</code>; that method is overloaded to permit custom
minimum and maximum values for the uniform distribution.</p>
</div>
</div>
</section>
<section class="toc">
<details open>
<summary>Topics</summary>
<div class="wrapper">
<ul>
<li><a href="#/s:12NumericAnnex4PRNGP5State">State</a></li>
<li><a href="#/s:12NumericAnnex4PRNGP5state5StateQzv">state</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPx5StateQz5state_tcfc">init(state:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPxSgycfc">init()</a></li>
<li><a href="#/s:12NumericAnnex4PRNGP3max7ElementQzvZ">max</a></li>
<li><a href="#/s:12NumericAnnex4PRNGP3min7ElementQzvZ">min</a></li>
</ul>
<ul>
<li><a href="#/s:12NumericAnnex4PRNGPAAE15_randomBitWidthSivZ">_randomBitWidth</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPAAE8_entropyqd__Sgqd__ms17FixedWidthIntegerRd__s08UnsignedG0Rd__lFZ">_entropy(_:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPAAE8_entropySayqd__GSgqd__m_Si5countts17FixedWidthIntegerRd__s08UnsignedH0Rd__lFZ">_entropy(_:count:)</a></li>
</ul>
<ul>
<li><a href="#/s:12NumericAnnex4PRNGPAAE7_randomqd__qd__m_Si8bitCountts17FixedWidthIntegerRd__s08UnsignedI0Rd__lF">_random(_:bitCount:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPAAE7uniformqd__qd__m_qd__1aqd__1bts17FixedWidthIntegerRd__s08UnsignedG0Rd__lF">uniform(_:a:b:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPAAE7uniformqd__qd__ms17FixedWidthIntegerRd__s08UnsignedG0Rd__lF">uniform(_:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPAAE7uniforms14UnfoldSequenceVyqd__SiGqd__m_qd__1aqd__1bSi5countts17FixedWidthIntegerRd__s08UnsignedJ0Rd__lF">uniform(_:a:b:count:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPAAE7uniforms14UnfoldSequenceVyqd__SiGqd__m_Si5countts17FixedWidthIntegerRd__s08UnsignedJ0Rd__lF">uniform(_:count:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPAAE7uniformqd__qd__m_qd__1aqd__1bts17FixedWidthIntegerRd__s06SignedG0Rd__sAG9Magnitudes0A0PRpd__s08UnsignedG0ALRQlF">uniform(_:a:b:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPAAE7uniformqd__qd__ms17FixedWidthIntegerRd__s06SignedG0Rd__sAE9Magnitudes0A0PRpd__s08UnsignedG0AJRQlF">uniform(_:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPAAE7uniforms14UnfoldSequenceVyqd__SiGqd__m_qd__1aqd__1bSi5countts17FixedWidthIntegerRd__s06SignedJ0Rd__sAK9Magnitudes0A0PRpd__s08UnsignedJ0APRQlF">uniform(_:a:b:count:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPAAE7uniforms14UnfoldSequenceVyqd__SiGqd__m_Si5countts17FixedWidthIntegerRd__s06SignedJ0Rd__sAI9Magnitudes0A0PRpd__s08UnsignedJ0ANRQlF">uniform(_:count:)</a></li>
</ul>
<ul>
<li><a href="#/s:12NumericAnnex4PRNGPA2aBRzs6UInt64V7ElementRtzlE7_randomqd__qd__m_Si8bitCountts19BinaryFloatingPointRd__lF">_random(_:bitCount:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPA2aBRzs6UInt64V7ElementRtzlE7uniformqd__qd__m_qd__1aqd__1bts19BinaryFloatingPointRd__lF">uniform(_:a:b:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPA2aBRzs6UInt64V7ElementRtzlE7uniformqd__qd__ms19BinaryFloatingPointRd__lF">uniform(_:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPA2aBRzs6UInt64V7ElementRtzlE7uniforms14UnfoldSequenceVyqd__SiGqd__m_qd__1aqd__1bSi5countts19BinaryFloatingPointRd__lF">uniform(_:a:b:count:)</a></li>
<li><a href="#/s:12NumericAnnex4PRNGPA2aBRzs6UInt64V7ElementRtzlE7uniforms14UnfoldSequenceVyqd__SiGqd__m_Si5countts19BinaryFloatingPointRd__lF">uniform(_:count:)</a></li>
</ul>
</div>
</details>
</section>
<section>
<div class="wrapper">
<div class="group">
<ul>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGP5State"></a>
<a name="//apple_ref/swift/Alias/State" class="dashAnchor"></a>
<h4>
<code>State</code>
</h4>
</div>
<div class="abstract">
<p>A type that can represent the internal state of the pseudo-random number
generator.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="k">associatedtype</span> <span class="kt">State</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGP5state5StateQzv"></a>
<a name="//apple_ref/swift/Property/state" class="dashAnchor"></a>
<h4>
<code>state</code>
</h4>
</div>
<div class="abstract">
<p>The internal state of the pseudo-random number generator.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="k">var</span> <span class="nv">state</span><span class="p">:</span> <span class="kt"><a href="../Protocols/PRNG.html#/s:12NumericAnnex4PRNGP5State">State</a></span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPx5StateQz5state_tcfc"></a>
<a name="//apple_ref/swift/Method/init(state:)" class="dashAnchor"></a>
<h4>
<code>init(state:)</code>
</h4>
</div>
<div class="abstract">
<p>Creates a pseudo-random number generator with the given internal state.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="nf">init</span><span class="p">(</span><span class="nv">state</span><span class="p">:</span> <span class="kt"><a href="../Protocols/PRNG.html#/s:12NumericAnnex4PRNGP5State">State</a></span><span class="p">)</span></code></pre>
</div>
</div>
<div class="parameters">
<h5>Parameters</h5>
<dl>
<dt><code>state</code></dt>
<dd>
<p>The value to be used as the generator&rsquo;s internal state.</p>
</dd>
</dl>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPxSgycfc"></a>
<a name="//apple_ref/swift/Method/init()" class="dashAnchor"></a>
<h4>
<code>init()</code>
</h4>
</div>
<div class="abstract">
<p>Creates a pseudo-random number generator with an internal state seeded
using cryptographically secure random bytes.</p>
<p>If cryptographically secure random bytes are unavailable, the result is
<code>nil</code>.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="nf">init</span><span class="p">?()</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGP3max7ElementQzvZ"></a>
<a name="//apple_ref/swift/Variable/max" class="dashAnchor"></a>
<h4>
<code>max</code>
<span class="declaration-note">Default implementation</span>
</h4>
</div>
<div class="abstract">
<p>The maximum value that may be generated by the pseudo-random number
generator.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">static</span> <span class="k">var</span> <span class="nv">max</span><span class="p">:</span> <span class="kt">Element</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGP3min7ElementQzvZ"></a>
<a name="//apple_ref/swift/Variable/min" class="dashAnchor"></a>
<h4>
<code>min</code>
<span class="declaration-note">Default implementation</span>
</h4>
</div>
<div class="abstract">
<p>The minimum value that may be generated by the pseudo-random number
generator.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">static</span> <span class="k">var</span> <span class="nv">min</span><span class="p">:</span> <span class="kt">Element</span></code></pre>
</div>
</div>
</li>
</ul>
</div>
<div class="group">
<ul>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE15_randomBitWidthSivZ"></a>
<a name="//apple_ref/swift/Variable/_randomBitWidth" class="dashAnchor"></a>
<h4>
<code>_randomBitWidth</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>The number of pseudo-random bits available from a value generated by the
pseudo-random number generator.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">static</span> <span class="k">var</span> <span class="nv">_randomBitWidth</span><span class="p">:</span> <span class="kt">Int</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE8_entropyqd__Sgqd__ms17FixedWidthIntegerRd__s08UnsignedG0Rd__lFZ"></a>
<a name="//apple_ref/swift/Method/_entropy(_:)" class="dashAnchor"></a>
<h4>
<code>_entropy(_:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Returns a value filled with data from a source of cryptographically secure
random bytes, or <code>nil</code> if a sufficient number of cryptographically secure
random bytes is unavailable.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">static</span> <span class="kd">func</span> <span class="n">_entropy</span><span class="o">&lt;</span>
<span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span>
<span class="o">&gt;</span><span class="p">(</span><span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">T</span><span class="p">?</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE8_entropySayqd__GSgqd__m_Si5countts17FixedWidthIntegerRd__s08UnsignedH0Rd__lFZ"></a>
<a name="//apple_ref/swift/Method/_entropy(_:count:)" class="dashAnchor"></a>
<h4>
<code>_entropy(_:count:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Returns an array of <code>count</code> values filled with data from a source of
cryptographically secure random bytes, or <code>nil</code> if a sufficient number of
cryptographically secure random bytes is unavailable.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">static</span> <span class="kd">func</span> <span class="n">_entropy</span><span class="o">&lt;</span>
<span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span>
<span class="o">&gt;</span><span class="p">(</span><span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">count</span><span class="p">:</span> <span class="kt">Int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="kt">T</span><span class="p">]?</span></code></pre>
</div>
</div>
</li>
</ul>
</div>
<div class="group">
<ul>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE7_randomqd__qd__m_Si8bitCountts17FixedWidthIntegerRd__s08UnsignedI0Rd__lF"></a>
<a name="//apple_ref/swift/Method/_random(_:bitCount:)" class="dashAnchor"></a>
<h4>
<code>_random(_:bitCount:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a pseudo-random unsigned integer of type <code>T</code> in the range from 0
to <code>2 ** min(bitCount, T.bitWidth)</code> (exclusive), where <code>**</code> is the
exponentiation operator.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">_random</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">bitCount</span><span class="p">:</span> <span class="kt">Int</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="n">bitWidth</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">T</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE7uniformqd__qd__m_qd__1aqd__1bts17FixedWidthIntegerRd__s08UnsignedG0Rd__lF"></a>
<a name="//apple_ref/swift/Method/uniform(_:a:b:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:a:b:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a pseudo-random unsigned integer of type <code>T</code> in the range from
<code>a</code> through <code>b</code> (inclusive) from the discrete uniform distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">a</span><span class="p">:</span> <span class="kt">T</span><span class="p">,</span> <span class="nv">b</span><span class="p">:</span> <span class="kt">T</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">T</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE7uniformqd__qd__ms17FixedWidthIntegerRd__s08UnsignedG0Rd__lF"></a>
<a name="//apple_ref/swift/Method/uniform(_:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a pseudo-random unsigned integer of type <code>T</code> in the range from
<code>T.min</code> through <code>T.max</code> (inclusive) from the discrete uniform
distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">T</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE7uniforms14UnfoldSequenceVyqd__SiGqd__m_qd__1aqd__1bSi5countts17FixedWidthIntegerRd__s08UnsignedJ0Rd__lF"></a>
<a name="//apple_ref/swift/Method/uniform(_:a:b:count:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:a:b:count:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a sequence of <code>count</code> pseudo-random unsigned integers of type
<code>T</code> in the range from <code>a</code> through <code>b</code> (inclusive) from the discrete
uniform distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">a</span><span class="p">:</span> <span class="kt">T</span><span class="p">,</span> <span class="nv">b</span><span class="p">:</span> <span class="kt">T</span><span class="p">,</span> <span class="nv">count</span><span class="p">:</span> <span class="kt">Int</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">UnfoldSequence</span><span class="o">&lt;</span><span class="kt">T</span><span class="p">,</span> <span class="kt">Int</span><span class="o">&gt;</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE7uniforms14UnfoldSequenceVyqd__SiGqd__m_Si5countts17FixedWidthIntegerRd__s08UnsignedJ0Rd__lF"></a>
<a name="//apple_ref/swift/Method/uniform(_:count:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:count:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a sequence of <code>count</code> pseudo-random unsigned integers of type
<code>T</code> in the range from <code>T.min</code> through <code>T.max</code> (inclusive) from the
discrete uniform distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">count</span><span class="p">:</span> <span class="kt">Int</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">UnfoldSequence</span><span class="o">&lt;</span><span class="kt">T</span><span class="p">,</span> <span class="kt">Int</span><span class="o">&gt;</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE7uniformqd__qd__m_qd__1aqd__1bts17FixedWidthIntegerRd__s06SignedG0Rd__sAG9Magnitudes0A0PRpd__s08UnsignedG0ALRQlF"></a>
<a name="//apple_ref/swift/Method/uniform(_:a:b:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:a:b:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a pseudo-random signed integer of type <code>T</code> in the range from <code>a</code>
through <code>b</code> (inclusive) from the discrete uniform distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">SignedInteger</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">a</span><span class="p">:</span> <span class="kt">T</span><span class="p">,</span> <span class="nv">b</span><span class="p">:</span> <span class="kt">T</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">T</span> <span class="k">where</span> <span class="kt">T</span><span class="o">.</span><span class="kt">Magnitude</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE7uniformqd__qd__ms17FixedWidthIntegerRd__s06SignedG0Rd__sAE9Magnitudes0A0PRpd__s08UnsignedG0AJRQlF"></a>
<a name="//apple_ref/swift/Method/uniform(_:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a pseudo-random signed integer of type <code>T</code> in the range from
<code>T.min</code> through <code>T.max</code> (inclusive) from the discrete uniform
distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">SignedInteger</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">T</span> <span class="k">where</span> <span class="kt">T</span><span class="o">.</span><span class="kt">Magnitude</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE7uniforms14UnfoldSequenceVyqd__SiGqd__m_qd__1aqd__1bSi5countts17FixedWidthIntegerRd__s06SignedJ0Rd__sAK9Magnitudes0A0PRpd__s08UnsignedJ0APRQlF"></a>
<a name="//apple_ref/swift/Method/uniform(_:a:b:count:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:a:b:count:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a sequence of <code>count</code> pseudo-random signed integers of type <code>T</code>
in the range from <code>a</code> through <code>b</code> (inclusive) from the discrete uniform
distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">SignedInteger</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">a</span><span class="p">:</span> <span class="kt">T</span><span class="p">,</span> <span class="nv">b</span><span class="p">:</span> <span class="kt">T</span><span class="p">,</span> <span class="nv">count</span><span class="p">:</span> <span class="kt">Int</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">UnfoldSequence</span><span class="o">&lt;</span><span class="kt">T</span><span class="p">,</span> <span class="kt">Int</span><span class="o">&gt;</span>
<span class="k">where</span> <span class="kt">T</span><span class="o">.</span><span class="kt">Magnitude</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPAAE7uniforms14UnfoldSequenceVyqd__SiGqd__m_Si5countts17FixedWidthIntegerRd__s06SignedJ0Rd__sAI9Magnitudes0A0PRpd__s08UnsignedJ0ANRQlF"></a>
<a name="//apple_ref/swift/Method/uniform(_:count:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:count:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a sequence of <code>count</code> pseudo-random signed integers of type <code>T</code>
in the range from <code>T.min</code> through <code>T.max</code> (inclusive) from the discrete
uniform distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">SignedInteger</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">count</span><span class="p">:</span> <span class="kt">Int</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">UnfoldSequence</span><span class="o">&lt;</span><span class="kt">T</span><span class="p">,</span> <span class="kt">Int</span><span class="o">&gt;</span>
<span class="k">where</span> <span class="kt">T</span><span class="o">.</span><span class="kt">Magnitude</span> <span class="p">:</span> <span class="kt">FixedWidthInteger</span> <span class="o">&amp;</span> <span class="kt">UnsignedInteger</span></code></pre>
</div>
</div>
</li>
</ul>
</div>
<div class="group">
<ul>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPA2aBRzs6UInt64V7ElementRtzlE7_randomqd__qd__m_Si8bitCountts19BinaryFloatingPointRd__lF"></a>
<a name="//apple_ref/swift/Method/_random(_:bitCount:)" class="dashAnchor"></a>
<h4>
<code>_random(_:bitCount:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a pseudo-random binary floating-point value of type <code>T</code> in the
range from 0 to 1 (exclusive) with <code>min(bitCount, T.significandBitCount)</code>
bits of precision.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">_random</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">BinaryFloatingPoint</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">bitCount</span><span class="p">:</span> <span class="kt">Int</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="n">significandBitCount</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">T</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPA2aBRzs6UInt64V7ElementRtzlE7uniformqd__qd__m_qd__1aqd__1bts19BinaryFloatingPointRd__lF"></a>
<a name="//apple_ref/swift/Method/uniform(_:a:b:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:a:b:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a pseudo-random binary floating-point value of type <code>T</code> in the
range from <code>a</code> to <code>b</code> (exclusive) from the uniform distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">BinaryFloatingPoint</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">a</span><span class="p">:</span> <span class="kt">T</span><span class="p">,</span> <span class="nv">b</span><span class="p">:</span> <span class="kt">T</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">T</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPA2aBRzs6UInt64V7ElementRtzlE7uniformqd__qd__ms19BinaryFloatingPointRd__lF"></a>
<a name="//apple_ref/swift/Method/uniform(_:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a pseudo-random binary floating-point value of type <code>T</code> in the
range from 0 to 1 (exclusive) from the uniform distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">BinaryFloatingPoint</span><span class="o">&gt;</span><span class="p">(</span><span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">T</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPA2aBRzs6UInt64V7ElementRtzlE7uniforms14UnfoldSequenceVyqd__SiGqd__m_qd__1aqd__1bSi5countts19BinaryFloatingPointRd__lF"></a>
<a name="//apple_ref/swift/Method/uniform(_:a:b:count:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:a:b:count:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a sequence of <code>count</code> pseudo-random binary floating-point values
of type <code>T</code> in the range from <code>a</code> to <code>b</code> (exclusive) from the uniform
distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">BinaryFloatingPoint</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">a</span><span class="p">:</span> <span class="kt">T</span><span class="p">,</span> <span class="nv">b</span><span class="p">:</span> <span class="kt">T</span><span class="p">,</span> <span class="nv">count</span><span class="p">:</span> <span class="kt">Int</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">UnfoldSequence</span><span class="o">&lt;</span><span class="kt">T</span><span class="p">,</span> <span class="kt">Int</span><span class="o">&gt;</span></code></pre>
</div>
</div>
</li>
<li>
<div>
<a name="/s:12NumericAnnex4PRNGPA2aBRzs6UInt64V7ElementRtzlE7uniforms14UnfoldSequenceVyqd__SiGqd__m_Si5countts19BinaryFloatingPointRd__lF"></a>
<a name="//apple_ref/swift/Method/uniform(_:count:)" class="dashAnchor"></a>
<h4>
<code>uniform(_:count:)</code>
<span class="declaration-note">Extension method</span>
</h4>
</div>
<div class="abstract">
<p>Generates a sequence of <code>count</code> pseudo-random binary floating-point values
of type <code>T</code> in the range from 0 to 1 (exclusive) from the uniform
distribution.</p>
</div>
<div class="declaration">
<h5>Declaration</h5>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="n">uniform</span><span class="o">&lt;</span><span class="kt">T</span> <span class="p">:</span> <span class="kt">BinaryFloatingPoint</span><span class="o">&gt;</span><span class="p">(</span>
<span class="nv">_</span><span class="p">:</span> <span class="kt">T</span><span class="o">.</span><span class="k">Type</span> <span class="o">=</span> <span class="kt">T</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">count</span><span class="p">:</span> <span class="kt">Int</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">UnfoldSequence</span><span class="o">&lt;</span><span class="kt">T</span><span class="p">,</span> <span class="kt">Int</span><span class="o">&gt;</span></code></pre>
</div>
</div>
</li>
</ul>
</div>
</div>
</section>
</article>
</div>
<footer>
<p>&copy; 2017 <a class="link" href="https://diploid.ca" target="_blank" rel="external">Xiaodi Wu</a>. All rights reserved. (Last updated: 2017-08-12)</p>
<p>Generated by <a href="https://github.com/realm/jazzy" target="_blank" rel="external">Jazzy</a> v0.8.3, a <a href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</footer>
</body>
</div>
</html>