movavg 2.3.0

Generic Moving Average calculation
Documentation
<section id="movavg-generic-moving-average-calculation">
<h2>movavg - Generic Moving Average calculation</h2>
<p><a href="https://bues.ch/" rel="nofollow">Project home</a></p>
<p><a href="https://bues.ch/cgit/movavgrs.git" rel="nofollow">Git repository</a></p>
<p><a href="https://github.com/mbuesch/movavgrs" rel="nofollow">Github repository</a></p>
<p>Generic <a href="https://en.wikipedia.org/wiki/Moving_average" rel="nofollow">Moving Average</a> calculation for the integer types</p>
<ul class="simple">
<li><p>i8, i16, i32, i64, i128, isize</p></li>
<li><p>u8, u16, u32, u64, u128, usize</p></li>
</ul>
<p>and float types</p>
<ul class="simple">
<li><p>f32, f64</p></li>
</ul>
</section>
<section id="example-cargo-toml-dependencies">
<h2>Example Cargo.toml dependencies</h2>
<p>Add this to your Cargo.toml:</p>
<pre><code><span class="k">[dependencies]</span><span class="w">
</span><span class="n">movavg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><s>&quot;2&quot;</s></code></pre>
</section>
<section id="example-usage">
<h2>Example usage</h2>
<pre><code><span class="c1">// Integers
</span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">avg</span>: <span class="nc">MovAvg</span><span class="o">&lt;</span><span class="kt">i32</span><span class="p">,</span><span class="w"> </span><span class="kt">i32</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="o">&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MovAvg</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span><span class="c1">// window size = 3
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">10</span><span class="p">),</span><span class="w"> </span><span class="mi">10</span><span class="p">);</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">20</span><span class="p">),</span><span class="w"> </span><span class="mi">15</span><span class="p">);</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">30</span><span class="p">),</span><span class="w"> </span><span class="mi">20</span><span class="p">);</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">40</span><span class="p">),</span><span class="w"> </span><span class="mi">30</span><span class="p">);</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="mi">30</span><span class="p">);</span><span class="w">

</span><span class="c1">// Floats
</span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">avg</span>: <span class="nc">MovAvg</span><span class="o">&lt;</span><span class="kt">f64</span><span class="p">,</span><span class="w"> </span><span class="kt">f64</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="o">&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MovAvg</span>::<span class="n">new</span><span class="p">();</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mf">10.0</span><span class="p">),</span><span class="w"> </span><span class="mf">10.0</span><span class="p">);</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mf">20.0</span><span class="p">),</span><span class="w"> </span><span class="mf">15.0</span><span class="p">);</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mf">30.0</span><span class="p">),</span><span class="w"> </span><span class="mf">20.0</span><span class="p">);</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mf">40.0</span><span class="p">),</span><span class="w"> </span><span class="mf">30.0</span><span class="p">);</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">get</span><span class="p">(),</span><span class="w"> </span><span class="mf">30.0</span><span class="p">);</span><span class="w">

</span><span class="c1">// Bigger accumulator
</span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">avg</span>: <span class="nc">MovAvg</span><span class="o">&lt;</span><span class="kt">i8</span><span class="p">,</span><span class="w"> </span><span class="kt">i32</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="o">&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MovAvg</span>::<span class="n">new</span><span class="p">();</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">100</span><span class="p">),</span><span class="w"> </span><span class="mi">100</span><span class="p">);</span><span class="w">
</span><span class="fm">assert_eq!</span><span class="p">(</span><span class="n">avg</span><span class="p">.</span><span class="n">feed</span><span class="p">(</span><span class="mi">100</span><span class="p">),</span><span class="w"> </span><span class="mi">100</span><span class="p">);</span><span class="w"> </span><span class="c1">// This would overflow an i8 accumulator</span></code></pre>
</section>
<section id="cargo-feature-selections">
<h2>Cargo Feature selections</h2>
<section id="no-std">
<h3>no_std</h3>
<p>If you want to use movavg without the <cite>std</cite> library (often called <cite>no_std</cite>), then use the following Cargo.toml dependency to disable the <cite>std</cite> feature:</p>
<pre><code><span class="k">[dependencies]</span><span class="w">
</span><span class="n">movavg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">version</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><s>&quot;2&quot;</s><span class="p">,</span><span class="w"> </span><span class="n">default-features</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">false</span><span class="w"> </span><span class="p">}</span></code></pre>
<p>Currently the <cite>no_std</cite> variant supports all functionality that the default <cite>std</cite> variant supports. But that may change in future.</p>
</section>
<section id="fastfloat">
<h3>fastfloat</h3>
<p>The <cite>fastfloat</cite> feature can be used to enable much faster, but less accurate floating point calculations. Enabling this feature leads to bigger floating point rounding and cancellation errors.</p>
<pre><code><span class="k">[dependencies]</span><span class="w">
</span><span class="n">movavg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">version</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><s>&quot;2&quot;</s><span class="p">,</span><span class="w"> </span><span class="n">features</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><s>&quot;fastfloat&quot;</s><span class="p">]</span><span class="w"> </span><span class="p">}</span></code></pre>
<p>This feature may also be used together with disabled <cite>std</cite> feature (see <cite>no_std</cite>).</p>
</section>
</section>
<section id="rust-compiler-version">
<h2>Rust compiler version</h2>
<p>Requires Rust compiler version 1.61 or later.</p>
</section>
<section id="license">
<h2>License</h2>
<p>Copyright (c) 2021-2023 Michael Büsch &lt;<a href="mailto:m&#37;&#52;&#48;bues&#46;ch">m<span>&#64;</span>bues<span>&#46;</span>ch</a>&gt;</p>
<p>Licensed under the Apache License version 2.0 or the MIT license, at your option.</p>
</section>