<html>#2925: overflow in rat<int64> in Arith
<table style='border-spacing: 1ex 0pt; '>
<tr><td style='text-align:right'> Reporter:</td><td>Roland Haas</td></tr>
<tr><td style='text-align:right'> Status:</td><td>new</td></tr>
<tr><td style='text-align:right'>Milestone:</td><td></td></tr>
<tr><td style='text-align:right'> Version:</td><td></td></tr>
<tr><td style='text-align:right'> Type:</td><td>bug</td></tr>
<tr><td style='text-align:right'> Priority:</td><td>minor</td></tr>
<tr><td style='text-align:right'>Component:</td><td></td></tr>
</table>
<p>Comment (by Roland Haas):</p>
<p>using <code>uint64_t</code> rollover is indeed simpler though:</p>
<div class="codehilite"><pre><span></span><code><span class="o">//</span> <span class="nt">TODO</span><span class="o">:</span> <span class="nt">need</span> <span class="nt">special</span> <span class="nt">code</span> <span class="nt">to</span> <span class="nt">handle</span> <span class="nt">the</span> <span class="nt">case</span> <span class="nt">if</span> <span class="nt">a</span> <span class="nt">or</span> <span class="nt">b</span> <span class="nt">is</span> <span class="nt">int64_min</span> <span class="nt">since</span> <span class="nt">-int64_min</span> <span class="o">></span> <span class="nt">int64_max</span> <span class="o">(</span><span class="nt">https</span><span class="o">://</span><span class="nt">en</span><span class="p">.</span><span class="nc">cppreference</span><span class="p">.</span><span class="nc">com</span><span class="o">/</span><span class="nt">w</span><span class="o">/</span><span class="nt">cpp</span><span class="o">/</span><span class="nt">numeric</span><span class="o">/</span><span class="nt">math</span><span class="o">/</span><span class="nt">abs</span><span class="p">#</span><span class="nn">Notes</span><span class="o">)</span>
<span class="nt">int64_t</span> <span class="nt">save_mult</span><span class="o">(</span><span class="nt">int64_t</span> <span class="nt">a</span><span class="o">,</span> <span class="nt">int64_t</span> <span class="nt">b</span><span class="o">)</span> <span class="p">{</span>
<span>int64_t</span> <span>sign</span> <span>=</span> <span>(a</span> <span>></span> <span>0)</span> <span>^</span> <span>(b</span> <span>></span> <span>0)</span><span class="p">;</span>
<span>uint64_t</span> <span>abs_a</span> <span>=</span> <span class="n">std</span><span class="p">:</span><span class="o">:</span><span class="nf">abs</span><span class="p">(</span><span class="n">a</span><span class="p">);</span>
<span>uint64_t</span> <span>abs_b</span> <span>=</span> <span class="n">std</span><span clas
<p>--<br/>
Ticket URL: <a href='https://bitbucket.org/einsteintoolkit/tickets/issues/2925/overflow-in-rat-in-arith'>https://bitbucket.org/einsteintoolkit/tickets/issues/2925/overflow-in-rat-in-arith</a></p>
</html>