pnmixer-rust/num/index.html

384 lines
22 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.0">
<meta name="generator" content="rustdoc">
<meta name="description" content="API documentation for the Rust `num` crate.">
<meta name="keywords" content="rust, rustlang, rust-lang, num">
<title>num - Rust</title>
<link rel="stylesheet" type="text/css" href="../normalize.css">
<link rel="stylesheet" type="text/css" href="../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../main.css">
<link rel="shortcut icon" href="https://rust-num.github.io/num/favicon.ico">
</head>
<body class="rustdoc mod">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
things.
</div>
<![endif]-->
<nav class="sidebar">
<a href='../num/index.html'><img src='https://rust-num.github.io/num/rust-logo-128x128-blk-v2.png' alt='logo' width='100'></a>
<p class='location'>Crate num</p><div class="block items"><ul><li><a href="#modules">Modules</a></li><li><a href="#traits">Traits</a></li><li><a href="#functions">Functions</a></li></ul></div><p class='location'></p><script>window.sidebarCurrent = {name: 'num', ty: 'mod', relpath: '../'};</script>
</nav>
<nav class="sub">
<form class="search-form js-only">
<div class="search-container">
<input class="search-input" name="search"
autocomplete="off"
placeholder="Click or press S to search, ? for more options…"
type="search">
</div>
</form>
</nav>
<section id='main' class="content">
<h1 class='fqn'><span class='in-band'>Crate <a class="mod" href=''>num</a></span><span class='out-of-band'><span id='render-detail'>
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
[<span class='inner'>&#x2212;</span>]
</a>
</span><a class='srclink' href='../src/num/lib.rs.html#11-111' title='goto source code'>[src]</a></span></h1>
<div class='docblock'><p>A collection of numeric types and traits for Rust.</p>
<p>This includes new types for big integers, rationals, and complex numbers,
new traits for generic programming on numeric properties like <code>Integer</code>,
and generic range iterators.</p>
<h2 id='example' class='section-header'><a href='#example'>Example</a></h2>
<p>This example uses the BigRational type and <a href="https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method">Newton&#39;s method</a> to
approximate a square root to arbitrary precision:</p>
<pre class="rust rust-example-rendered">
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">num</span>;
<span class="kw">use</span> <span class="ident">num</span>::<span class="ident">FromPrimitive</span>;
<span class="kw">use</span> <span class="ident">num</span>::<span class="ident">bigint</span>::<span class="ident">BigInt</span>;
<span class="kw">use</span> <span class="ident">num</span>::<span class="ident">rational</span>::{<span class="ident">Ratio</span>, <span class="ident">BigRational</span>};
<span class="kw">fn</span> <span class="ident">approx_sqrt</span>(<span class="ident">number</span>: <span class="ident">u64</span>, <span class="ident">iterations</span>: <span class="ident">usize</span>) <span class="op">-&gt;</span> <span class="ident">BigRational</span> {
<span class="kw">let</span> <span class="ident">start</span>: <span class="ident">Ratio</span><span class="op">&lt;</span><span class="ident">BigInt</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">Ratio</span>::<span class="ident">from_integer</span>(<span class="ident">FromPrimitive</span>::<span class="ident">from_u64</span>(<span class="ident">number</span>).<span class="ident">unwrap</span>());
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">approx</span> <span class="op">=</span> <span class="ident">start</span>.<span class="ident">clone</span>();
<span class="kw">for</span> _ <span class="kw">in</span> <span class="number">0</span>..<span class="ident">iterations</span> {
<span class="ident">approx</span> <span class="op">=</span> (<span class="kw-2">&amp;</span><span class="ident">approx</span> <span class="op">+</span> (<span class="kw-2">&amp;</span><span class="ident">start</span> <span class="op">/</span> <span class="kw-2">&amp;</span><span class="ident">approx</span>)) <span class="op">/</span>
<span class="ident">Ratio</span>::<span class="ident">from_integer</span>(<span class="ident">FromPrimitive</span>::<span class="ident">from_u64</span>(<span class="number">2</span>).<span class="ident">unwrap</span>());
}
<span class="ident">approx</span>
}
<span class="kw">fn</span> <span class="ident">main</span>() {
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;{}&quot;</span>, <span class="ident">approx_sqrt</span>(<span class="number">10</span>, <span class="number">4</span>)); <span class="comment">// prints 4057691201/1283082416</span>
}
<a class="test-arrow" target="_blank" href="http://play.integer32.com/?code=extern%20crate%20num%3B%0A%23%5Bcfg(all(feature%20%3D%20%22bigint%22%2C%20feature%3D%22rational%22))%5D%0Amod%20test%20%7B%0A%0Ause%20num%3A%3AFromPrimitive%3B%0Ause%20num%3A%3Abigint%3A%3ABigInt%3B%0Ause%20num%3A%3Arational%3A%3A%7BRatio%2C%20BigRational%7D%3B%0A%0Apub%0Afn%20approx_sqrt(number%3A%20u64%2C%20iterations%3A%20usize)%20-%3E%20BigRational%20%7B%0A%20%20%20%20let%20start%3A%20Ratio%3CBigInt%3E%20%3D%20Ratio%3A%3Afrom_integer(FromPrimitive%3A%3Afrom_u64(number).unwrap())%3B%0A%20%20%20%20let%20mut%20approx%20%3D%20start.clone()%3B%0A%0A%20%20%20%20for%20_%20in%200..iterations%20%7B%0A%20%20%20%20%20%20%20%20approx%20%3D%20(%26approx%20%2B%20(%26start%20%2F%20%26approx))%20%2F%0A%20%20%20%20%20%20%20%20%20%20%20%20Ratio%3A%3Afrom_integer(FromPrimitive%3A%3Afrom_u64(2).unwrap())%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20approx%0A%7D%0A%7D%0A%23%5Bcfg(not(all(feature%20%3D%20%22bigint%22%2C%20feature%3D%22rational%22)))%5D%0Amod%20test%20%7B%20pub%20fn%20approx_sqrt(n%3A%20u64%2C%20_%3A%20usize)%20-%3E%20u64%20%7B%20n%20%7D%20%7D%0Ause%20test%3A%3Aapprox_sqrt%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20approx_sqrt(10%2C%204))%3B%20%2F%2F%20prints%204057691201%2F1283082416%0A%7D%0A">Run</a></pre>
</div><h2 id='modules' class='section-header'><a href="#modules">Modules</a></h2>
<table>
<tr class=' module-item'>
<td><a class="mod" href="cast/index.html"
title='mod num::cast'>cast</a></td>
<td class='docblock-short'>
</td>
</tr>
<tr class=' module-item'>
<td><a class="mod" href="integer/index.html"
title='mod num::integer'>integer</a></td>
<td class='docblock-short'>
</td>
</tr>
<tr class=' module-item'>
<td><a class="mod" href="iter/index.html"
title='mod num::iter'>iter</a></td>
<td class='docblock-short'>
</td>
</tr>
<tr class=' module-item'>
<td><a class="mod" href="pow/index.html"
title='mod num::pow'>pow</a></td>
<td class='docblock-short'>
</td>
</tr>
<tr class=' module-item'>
<td><a class="mod" href="traits/index.html"
title='mod num::traits'>traits</a></td>
<td class='docblock-short'>
</td>
</tr></table><h2 id='traits' class='section-header'><a href="#traits">Traits</a></h2>
<table>
<tr class=' module-item'>
<td><a class="trait" href="trait.Bounded.html"
title='trait num::Bounded'>Bounded</a></td>
<td class='docblock-short'>
<p>Numbers which have upper and lower bounds</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.CheckedAdd.html"
title='trait num::CheckedAdd'>CheckedAdd</a></td>
<td class='docblock-short'>
<p>Performs addition that returns <code>None</code> instead of wrapping around on
overflow.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.CheckedDiv.html"
title='trait num::CheckedDiv'>CheckedDiv</a></td>
<td class='docblock-short'>
<p>Performs division that returns <code>None</code> instead of panicking on division by zero and instead of
wrapping around on underflow and overflow.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.CheckedMul.html"
title='trait num::CheckedMul'>CheckedMul</a></td>
<td class='docblock-short'>
<p>Performs multiplication that returns <code>None</code> instead of wrapping around on underflow or
overflow.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.CheckedSub.html"
title='trait num::CheckedSub'>CheckedSub</a></td>
<td class='docblock-short'>
<p>Performs subtraction that returns <code>None</code> instead of wrapping around on underflow.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.Float.html"
title='trait num::Float'>Float</a></td>
<td class='docblock-short'>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.FromPrimitive.html"
title='trait num::FromPrimitive'>FromPrimitive</a></td>
<td class='docblock-short'>
<p>A generic trait for converting a number to a value.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.Integer.html"
title='trait num::Integer'>Integer</a></td>
<td class='docblock-short'>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.Num.html"
title='trait num::Num'>Num</a></td>
<td class='docblock-short'>
<p>The base trait for numeric types, covering <code>0</code> and <code>1</code> values,
comparisons, basic numeric operations, and string conversion.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.NumCast.html"
title='trait num::NumCast'>NumCast</a></td>
<td class='docblock-short'>
<p>An interface for casting between machine scalars.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.One.html"
title='trait num::One'>One</a></td>
<td class='docblock-short'>
<p>Defines a multiplicative identity element for <code>Self</code>.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.PrimInt.html"
title='trait num::PrimInt'>PrimInt</a></td>
<td class='docblock-short'>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.Saturating.html"
title='trait num::Saturating'>Saturating</a></td>
<td class='docblock-short'>
<p>Saturating math operations</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.Signed.html"
title='trait num::Signed'>Signed</a></td>
<td class='docblock-short'>
<p>Useful functions for signed numbers (i.e. numbers that can be negative).</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.ToPrimitive.html"
title='trait num::ToPrimitive'>ToPrimitive</a></td>
<td class='docblock-short'>
<p>A generic trait for converting a value to a number.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.Unsigned.html"
title='trait num::Unsigned'>Unsigned</a></td>
<td class='docblock-short'>
<p>A trait for values which cannot be negative</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="trait" href="trait.Zero.html"
title='trait num::Zero'>Zero</a></td>
<td class='docblock-short'>
<p>Defines an additive identity element for <code>Self</code>.</p>
</td>
</tr></table><h2 id='functions' class='section-header'><a href="#functions">Functions</a></h2>
<table>
<tr class=' module-item'>
<td><a class="fn" href="fn.abs.html"
title='fn num::abs'>abs</a></td>
<td class='docblock-short'>
<p>Computes the absolute value.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="fn" href="fn.abs_sub.html"
title='fn num::abs_sub'>abs_sub</a></td>
<td class='docblock-short'>
<p>The positive difference of two numbers.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="fn" href="fn.checked_pow.html"
title='fn num::checked_pow'>checked_pow</a></td>
<td class='docblock-short'>
<p>Raises a value to the power of exp, returning <code>None</code> if an overflow occurred.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="fn" href="fn.clamp.html"
title='fn num::clamp'>clamp</a></td>
<td class='docblock-short'>
<p>A value bounded by a minimum and a maximum</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="fn" href="fn.one.html"
title='fn num::one'>one</a></td>
<td class='docblock-short'>
<p>Returns the multiplicative identity, <code>1</code>.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="fn" href="fn.range.html"
title='fn num::range'>range</a></td>
<td class='docblock-short'>
<p>Returns an iterator over the given range [start, stop) (that is, starting
at start (inclusive), and ending at stop (exclusive)).</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="fn" href="fn.range_inclusive.html"
title='fn num::range_inclusive'>range_inclusive</a></td>
<td class='docblock-short'>
<p>Return an iterator over the range [start, stop]</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="fn" href="fn.range_step.html"
title='fn num::range_step'>range_step</a></td>
<td class='docblock-short'>
<p>Return an iterator over the range [start, stop) by <code>step</code>. It handles overflow by stopping.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="fn" href="fn.range_step_inclusive.html"
title='fn num::range_step_inclusive'>range_step_inclusive</a></td>
<td class='docblock-short'>
<p>Return an iterator over the range [start, stop] by <code>step</code>. It handles overflow by stopping.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="fn" href="fn.signum.html"
title='fn num::signum'>signum</a></td>
<td class='docblock-short'>
<p>Returns the sign of the number.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class="fn" href="fn.zero.html"
title='fn num::zero'>zero</a></td>
<td class='docblock-short'>
<p>Returns the additive identity, <code>0</code>.</p>
</td>
</tr></table></section>
<section id='search' class="content hidden"></section>
<section class="footer"></section>
<aside id="help" class="hidden">
<div>
<h1 class="hidden">Help</h1>
<div class="shortcuts">
<h2>Keyboard Shortcuts</h2>
<dl>
<dt>?</dt>
<dd>Show this help dialog</dd>
<dt>S</dt>
<dd>Focus the search field</dd>
<dt>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</dt>
<dd>Go to active search result</dd>
<dt>+</dt>
<dd>Collapse/expand all sections</dd>
</dl>
</div>
<div class="infos">
<h2>Search Tricks</h2>
<p>
Prefix searches with a type followed by a colon (e.g.
<code>fn:</code>) to restrict the search to a given type.
</p>
<p>
Accepted types are: <code>fn</code>, <code>mod</code>,
<code>struct</code>, <code>enum</code>,
<code>trait</code>, <code>type</code>, <code>macro</code>,
and <code>const</code>.
</p>
<p>
Search functions by type signature (e.g.
<code>vec -> usize</code> or <code>* -> vec</code>)
</p>
</div>
</div>
</aside>
<script>
window.rootPath = "../";
window.currentCrate = "num";
</script>
<script src="../main.js"></script>
<script defer src="../search-index.js"></script>
</body>
</html>