1599 lines
74 KiB
HTML
1599 lines
74 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
<html>
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<title>Appendices</title>
|
||
<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
|
||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||
<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
|
||
<link rel="up" href="../ratio.html" title="Chapter 35. Boost.Ratio 2.1.0">
|
||
<link rel="prev" href="reference.html" title="Reference">
|
||
<link rel="next" href="../signals2.html" title="Chapter 36. Boost.Signals2">
|
||
</head>
|
||
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
|
||
<table cellpadding="2" width="100%"><tr>
|
||
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
|
||
<td align="center"><a href="../../../index.html">Home</a></td>
|
||
<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
|
||
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
|
||
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
|
||
<td align="center"><a href="../../../more/index.htm">More</a></td>
|
||
</tr></table>
|
||
<hr>
|
||
<div class="spirit-nav">
|
||
<a accesskey="p" href="reference.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ratio.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../signals2.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
|
||
<a name="ratio.appendices"></a><a class="link" href="appendices.html" title="Appendices">Appendices</a>
|
||
</h2></div></div></div>
|
||
<div class="toc"><dl class="toc">
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history">Appendix A: History</a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.rationale">Appendix B: Rationale</a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.implementation">Appendix C: Implementation
|
||
Notes</a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.faq">Appendix D: FAQ</a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.acknowledgements">Appendix E: Acknowledgements</a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.tests">Appendix F: Tests</a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.tickets">Appendix G: Tickets</a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.todo">Appendix H: Future Plans</a></span></dt>
|
||
</dl></div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h3 class="title">
|
||
<a name="ratio.appendices.history"></a><a class="link" href="appendices.html#ratio.appendices.history" title="Appendix A: History">Appendix A: History</a>
|
||
</h3></div></div></div>
|
||
<div class="toc"><dl class="toc">
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history.__version_2_1_0__febreary_1__2014___1_56__"><span class="bold"><strong>Version 2.1.0, Febreary 1, 2014 - 1.56</strong></span> </a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history.__version_2_0_1__febreary_1__2013___1_53__"><span class="bold"><strong>Version 2.0.1, Febreary 1, 2013 - 1.53</strong></span> </a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history.__version_2_0_0__november_1__2012___1_52__"><span class="bold"><strong>Version 2.0.0, November 1, 2012 - 1.52</strong></span> </a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history.__version_1_0_3__august_1__2012___1_51__"><span class="bold"><strong>Version 1.0.3, August 1, 2012 - 1.51</strong></span> </a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history.__version_1_0_2__april_1__2012___1_50__"><span class="bold"><strong>Version 1.0.2, April 1, 2012 - 1.50</strong></span> </a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history.__version_1_0_1__jan_8__2011___"><span class="bold"><strong>Version 1.0.1, Jan 8, 2011 </strong></span> </a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history.__version_1_0_0__jan_2__2011__"><span class="bold"><strong>Version 1.0.0, Jan 2, 2011</strong></span> </a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history.__version_0_2_1__september_27__2010__"><span class="bold"><strong>Version 0.2.1, September 27, 2010</strong></span> </a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history.__version_0_2_0__september_22__2010__"><span class="bold"><strong>Version 0.2.0, September 22, 2010</strong></span> </a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.history.__version_0_1_0__september_10__2010__"><span class="bold"><strong>Version 0.1.0, September 10, 2010</strong></span> </a></span></dt>
|
||
</dl></div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.history.__version_2_1_0__febreary_1__2014___1_56__"></a><a class="link" href="appendices.html#ratio.appendices.history.__version_2_1_0__febreary_1__2014___1_56__" title="Version 2.1.0, Febreary 1, 2014 - 1.56"><span class="bold"><strong>Version 2.1.0, Febreary 1, 2014 - 1.56</strong></span> </a>
|
||
</h4></div></div></div>
|
||
<p>
|
||
<span class="bold"><strong>New Features:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
<a href="http://svn.boost.org/trac/boost/ticket/XXXX" target="_top">#XXXX</a>
|
||
Add ratio_power.
|
||
</li>
|
||
<li class="listitem">
|
||
<a href="http://svn.boost.org/trac/boost/ticket/XXXX" target="_top">#XXXX</a>
|
||
Add IEC binary prefixes.
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.history.__version_2_0_1__febreary_1__2013___1_53__"></a><a class="link" href="appendices.html#ratio.appendices.history.__version_2_0_1__febreary_1__2013___1_53__" title="Version 2.0.1, Febreary 1, 2013 - 1.53"><span class="bold"><strong>Version 2.0.1, Febreary 1, 2013 - 1.53</strong></span> </a>
|
||
</h4></div></div></div>
|
||
<p>
|
||
<span class="bold"><strong>Fixes:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<a href="http://svn.boost.org/trac/boost/ticket/7616" target="_top">#7616</a>
|
||
br_mul::nan - warning C4293: '<<' : shift count negative or too
|
||
big, undefined behavior`.
|
||
</li></ul></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.history.__version_2_0_0__november_1__2012___1_52__"></a><a class="link" href="appendices.html#ratio.appendices.history.__version_2_0_0__november_1__2012___1_52__" title="Version 2.0.0, November 1, 2012 - 1.52"><span class="bold"><strong>Version 2.0.0, November 1, 2012 - 1.52</strong></span> </a>
|
||
</h4></div></div></div>
|
||
<p>
|
||
<span class="bold"><strong>Features:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
Replace the short_name and long_name functions by symbol and prefix
|
||
functions respectively.
|
||
</li></ul></div>
|
||
<p>
|
||
<span class="bold"><strong>Deprecated:</strong></span>
|
||
</p>
|
||
<p>
|
||
The ratio_string<>::short_name and ratio_string<>::long_name
|
||
are deprecated. Use ratio_string<>::symbol and ratio_string<>::prefix
|
||
respectively. These functions be removed in 1.55.
|
||
</p>
|
||
<p>
|
||
<span class="bold"><strong>Fixes:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<a href="http://svn.boost.org/trac/boost/ticket/7478" target="_top">#7478</a>
|
||
Compiles fails with compilers supporting char16_t and char32_t fails
|
||
if the library doesn't provides std::u16string and std::u32string.
|
||
</li></ul></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.history.__version_1_0_3__august_1__2012___1_51__"></a><a class="link" href="appendices.html#ratio.appendices.history.__version_1_0_3__august_1__2012___1_51__" title="Version 1.0.3, August 1, 2012 - 1.51"><span class="bold"><strong>Version 1.0.3, August 1, 2012 - 1.51</strong></span> </a>
|
||
</h4></div></div></div>
|
||
<p>
|
||
<span class="bold"><strong>Fixes:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<a href="http://svn.boost.org/trac/boost/ticket/7075" target="_top">#7075</a>
|
||
Workaround for error: the type of partial specialization template parameter
|
||
constant "n1" depends on another template parameter.
|
||
</li></ul></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.history.__version_1_0_2__april_1__2012___1_50__"></a><a class="link" href="appendices.html#ratio.appendices.history.__version_1_0_2__april_1__2012___1_50__" title="Version 1.0.2, April 1, 2012 - 1.50"><span class="bold"><strong>Version 1.0.2, April 1, 2012 - 1.50</strong></span> </a>
|
||
</h4></div></div></div>
|
||
<p>
|
||
<span class="bold"><strong>Fixes:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
<a href="http://svn.boost.org/trac/boost/ticket/6498" target="_top">#6498</a>
|
||
boost::ratio won't compile with default settings.
|
||
</li></ul></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.history.__version_1_0_1__jan_8__2011___"></a><a class="link" href="appendices.html#ratio.appendices.history.__version_1_0_1__jan_8__2011___" title="Version 1.0.1, Jan 8, 2011"><span class="bold"><strong>Version 1.0.1, Jan 8, 2011 </strong></span> </a>
|
||
</h4></div></div></div>
|
||
<p>
|
||
<span class="bold"><strong>Features:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
Added MPL Rational Constant and the associated numeric metafunction
|
||
specializations.
|
||
</li></ul></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.history.__version_1_0_0__jan_2__2011__"></a><a class="link" href="appendices.html#ratio.appendices.history.__version_1_0_0__jan_2__2011__" title="Version 1.0.0, Jan 2, 2011"><span class="bold"><strong>Version 1.0.0, Jan 2, 2011</strong></span> </a>
|
||
</h4></div></div></div>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Moved ratio to trunk.
|
||
</li>
|
||
<li class="listitem">
|
||
Documentation revision.
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.history.__version_0_2_1__september_27__2010__"></a><a class="link" href="appendices.html#ratio.appendices.history.__version_0_2_1__september_27__2010__" title="Version 0.2.1, September 27, 2010"><span class="bold"><strong>Version 0.2.1, September 27, 2010</strong></span> </a>
|
||
</h4></div></div></div>
|
||
<p>
|
||
<span class="bold"><strong>Fixes:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
Removal of LLVM adapted files due to incompatible License issue.
|
||
</li></ul></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.history.__version_0_2_0__september_22__2010__"></a><a class="link" href="appendices.html#ratio.appendices.history.__version_0_2_0__september_22__2010__" title="Version 0.2.0, September 22, 2010"><span class="bold"><strong>Version 0.2.0, September 22, 2010</strong></span> </a>
|
||
</h4></div></div></div>
|
||
<p>
|
||
<span class="bold"><strong>Features:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
Added ratio_string traits.
|
||
</li></ul></div>
|
||
<p>
|
||
<span class="bold"><strong>Fixes:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
ratio_less overflow avoided following the algorithm from libc++.
|
||
</li></ul></div>
|
||
<p>
|
||
<span class="bold"><strong>Test:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
A more complete test has been included adapted from the test of from
|
||
libc++/ratio.
|
||
</li></ul></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.history.__version_0_1_0__september_10__2010__"></a><a class="link" href="appendices.html#ratio.appendices.history.__version_0_1_0__september_10__2010__" title="Version 0.1.0, September 10, 2010"><span class="bold"><strong>Version 0.1.0, September 10, 2010</strong></span> </a>
|
||
</h4></div></div></div>
|
||
<p>
|
||
<span class="bold"><strong>Features:</strong></span>
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
Ratio has been extracted from Boost.Chrono.
|
||
</li></ul></div>
|
||
</div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h3 class="title">
|
||
<a name="ratio.appendices.rationale"></a><a class="link" href="appendices.html#ratio.appendices.rationale" title="Appendix B: Rationale">Appendix B: Rationale</a>
|
||
</h3></div></div></div>
|
||
<h5>
|
||
<a name="ratio.appendices.rationale.h0"></a>
|
||
<span class="phrase"><a name="ratio.appendices.rationale.why_ratio_needs_copyconstruction_and_assignment_from_ratios_having_the_same_normalized_form"></a></span><a class="link" href="appendices.html#ratio.appendices.rationale.why_ratio_needs_copyconstruction_and_assignment_from_ratios_having_the_same_normalized_form">Why
|
||
ratio needs CopyConstruction and Assignment from ratios having the same normalized
|
||
form</a>
|
||
</h5>
|
||
<p>
|
||
Current <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n3000.pdf" target="_top"><span class="bold"><strong>N3000</strong></span></a> doesn't allows to copy-construct or
|
||
assign ratio instances of ratio classes having the same normalized form.
|
||
</p>
|
||
<p>
|
||
This simple example
|
||
</p>
|
||
<pre class="programlisting"><a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio" title="Class Template ratio<>"><code class="computeroutput"><span class="identifier">ratio</span></code></a><span class="special"><</span><span class="number">1</span><span class="special">,</span><span class="number">3</span><span class="special">></span> <span class="identifier">r1</span><span class="special">;</span>
|
||
<a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio" title="Class Template ratio<>"><code class="computeroutput"><span class="identifier">ratio</span></code></a><span class="special"><</span><span class="number">3</span><span class="special">,</span><span class="number">9</span><span class="special">></span> <span class="identifier">r2</span><span class="special">;</span>
|
||
<span class="identifier">r1</span> <span class="special">=</span> <span class="identifier">r2</span><span class="special">;</span> <span class="comment">// (1)</span>
|
||
</pre>
|
||
<p>
|
||
fails to compile in (1). Other example
|
||
</p>
|
||
<pre class="programlisting"><a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio" title="Class Template ratio<>"><code class="computeroutput"><span class="identifier">ratio</span></code></a><span class="special"><</span><span class="number">1</span><span class="special">,</span><span class="number">3</span><span class="special">></span> <span class="identifier">r1</span><span class="special">;</span>
|
||
<a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio_arithmetic" title="ratio Arithmetic"><code class="computeroutput"><span class="identifier">ratio_subtract</span></code></a><span class="special"><</span><a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio" title="Class Template ratio<>"><code class="computeroutput"><span class="identifier">ratio</span></code></a><span class="special"><</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">>,</span><a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio" title="Class Template ratio<>"><code class="computeroutput"><span class="identifier">ratio</span></code></a><span class="special"><</span><span class="number">1</span><span class="special">,</span><span class="number">3</span><span class="special">></span> <span class="special">></span> <span class="identifier">r2</span><span class="special">=</span><span class="identifier">r1</span><span class="special">;</span> <span class="comment">// (2)</span>
|
||
</pre>
|
||
<p>
|
||
The type of <code class="computeroutput"><a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio_arithmetic" title="ratio Arithmetic"><code class="computeroutput"><span class="identifier">ratio_subtract</span></code></a><span class="special"><</span><a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio" title="Class Template ratio<>"><code class="computeroutput"><span class="identifier">ratio</span></code></a><span class="special"><</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">>,</span><a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio" title="Class Template ratio<>"><code class="computeroutput"><span class="identifier">ratio</span></code></a><span class="special"><</span><span class="number">1</span><span class="special">,</span><span class="number">3</span><span class="special">></span> <span class="special">></span></code>
|
||
could be <code class="computeroutput"><a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio" title="Class Template ratio<>"><code class="computeroutput"><span class="identifier">ratio</span></code></a><span class="special"><</span><span class="number">3</span><span class="special">,</span><span class="number">9</span><span class="special">></span></code> so the compilation could fail in (2).
|
||
It could also be <a class="link" href="reference.html#ratio.reference.std.ratio_hpp.ratio" title="Class Template ratio<>"><code class="computeroutput"><span class="identifier">ratio</span></code></a><1,3> and the compilation
|
||
succeeds.
|
||
</p>
|
||
<h5>
|
||
<a name="ratio.appendices.rationale.h1"></a>
|
||
<span class="phrase"><a name="ratio.appendices.rationale.why_ratio_needs_the_nested_normalizer_typedef_type"></a></span><a class="link" href="appendices.html#ratio.appendices.rationale.why_ratio_needs_the_nested_normalizer_typedef_type">Why
|
||
ratio needs the nested normalizer typedef type</a>
|
||
</h5>
|
||
<p>
|
||
The current resolution of issue LWG 1281 acknowledges the need for a nested
|
||
type typedef, so Boost.Ratio is tracking the likely final version of std::ratio.
|
||
</p>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h3 class="title">
|
||
<a name="ratio.appendices.implementation"></a><a class="link" href="appendices.html#ratio.appendices.implementation" title="Appendix C: Implementation Notes">Appendix C: Implementation
|
||
Notes</a>
|
||
</h3></div></div></div>
|
||
<h5>
|
||
<a name="ratio.appendices.implementation.h0"></a>
|
||
<span class="phrase"><a name="ratio.appendices.implementation.how_does_boost_ratio_try_to_avoid_compile_time_rational_arithmetic_overflow_"></a></span><a class="link" href="appendices.html#ratio.appendices.implementation.how_does_boost_ratio_try_to_avoid_compile_time_rational_arithmetic_overflow_">How
|
||
does Boost.Ratio try to avoid compile-time rational arithmetic overflow?</a>
|
||
</h5>
|
||
<p>
|
||
When the result is representable, but a simple application of arithmetic
|
||
rules would result in overflow, e.g. <code class="computeroutput"><span class="identifier">ratio_multiply</span><span class="special"><</span><span class="identifier">ratio</span><span class="special"><</span><span class="identifier">INTMAX_MAX</span><span class="special">,</span><span class="number">2</span><span class="special">>,</span><span class="identifier">ratio</span><span class="special"><</span><span class="number">2</span><span class="special">,</span><span class="identifier">INTMAX_MAX</span><span class="special">>></span></code> can be reduced to <code class="computeroutput"><span class="identifier">ratio</span><span class="special"><</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">></span></code>, but
|
||
the direct result of <code class="computeroutput"><span class="identifier">ratio</span><span class="special"><</span><span class="identifier">INTMAX_MAX</span><span class="special">*</span><span class="number">2</span><span class="special">,</span><span class="identifier">INTMAX_MAX</span><span class="special">*</span><span class="number">2</span><span class="special">></span></code> would
|
||
result in overflow.
|
||
</p>
|
||
<p>
|
||
Boost.Ratio implements some simplifications in order to reduce the possibility
|
||
of overflow. The general ideas are:
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
The <code class="computeroutput"><span class="identifier">num</span></code> and <code class="computeroutput"><span class="identifier">den</span></code> <code class="computeroutput"><span class="identifier">ratio</span><span class="special"><></span></code> fields are normalized.
|
||
</li>
|
||
<li class="listitem">
|
||
Use the gcd of some of the possible products that can overflow, and simplify
|
||
before doing the product.
|
||
</li>
|
||
<li class="listitem">
|
||
Use some equivalences relations that avoid addition or subtraction that
|
||
can overflow or underflow.
|
||
</li>
|
||
</ul></div>
|
||
<p>
|
||
The following subsections cover each case in more detail.
|
||
</p>
|
||
<p>
|
||
<span class="bold"><strong>ratio_add</strong></span>
|
||
</p>
|
||
<p>
|
||
In
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span><span class="identifier">n1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)+(</span><span class="identifier">n2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)=(</span><span class="identifier">n1</span><span class="special">*</span><span class="identifier">d2</span><span class="special">+</span><span class="identifier">n2</span><span class="special">*</span><span class="identifier">d1</span><span class="special">)/(</span><span class="identifier">d1</span><span class="special">*</span><span class="identifier">d2</span><span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
either n1*d2+n2*d1 or d1*d2 can overflow.
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span> <span class="special">(</span><span class="identifier">n1</span> <span class="special">*</span> <span class="identifier">d2</span><span class="special">)</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">n2</span> <span class="special">*</span> <span class="identifier">d1</span><span class="special">)</span> <span class="special">)</span>
|
||
<span class="special">--------------------------</span>
|
||
<span class="special">(</span><span class="identifier">d1</span> <span class="special">*</span> <span class="identifier">d2</span><span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
Dividing by gcd(d1,d2) on both num and den
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span> <span class="special">(</span><span class="identifier">n1</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">n2</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">)</span>
|
||
<span class="special">----------------------------------------------------</span>
|
||
<span class="special">((</span><span class="identifier">d1</span> <span class="special">*</span> <span class="identifier">d2</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">))</span>
|
||
</pre>
|
||
<p>
|
||
Multiplying and diving by gcd(n1,n2) in numerator
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span> <span class="special">((</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">)*(</span><span class="identifier">n1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">)))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">+</span>
|
||
<span class="special">((</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">)*(</span><span class="identifier">n2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">)))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span>
|
||
<span class="special">)</span>
|
||
<span class="special">--------------------------------------------------</span>
|
||
<span class="special">(</span> <span class="special">(</span><span class="identifier">d1</span> <span class="special">*</span> <span class="identifier">d2</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)</span> <span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
Factorizing gcd(n1,n2)
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span> <span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">)</span> <span class="special">*</span>
|
||
<span class="special">(</span> <span class="special">((</span><span class="identifier">n1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">+</span> <span class="special">((</span><span class="identifier">n2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">)</span>
|
||
<span class="special">)</span>
|
||
<span class="special">-------------------------------------------------------------------------------</span>
|
||
<span class="special">(</span> <span class="special">(</span><span class="identifier">d1</span> <span class="special">*</span> <span class="identifier">d2</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)</span> <span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
Regrouping
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span> <span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">)</span> <span class="special">*</span>
|
||
<span class="special">(</span> <span class="special">((</span><span class="identifier">n1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">+</span> <span class="special">((</span><span class="identifier">n2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">)</span>
|
||
<span class="special">)</span>
|
||
<span class="special">-------------------------------------------------------------------------------</span>
|
||
<span class="special">(</span> <span class="special">(</span><span class="identifier">d1</span> <span class="special">/</span> <span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">))</span> <span class="special">*</span> <span class="identifier">d2</span> <span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
Dividing by (d1 / gcd(d1,d2))
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span> <span class="special">(</span> <span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">)</span> <span class="special">/</span> <span class="special">(</span><span class="identifier">d1</span> <span class="special">/</span> <span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">))</span> <span class="special">)</span> <span class="special">*</span>
|
||
<span class="special">(</span> <span class="special">((</span><span class="identifier">n1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">+</span> <span class="special">((</span><span class="identifier">n2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">)</span>
|
||
<span class="special">)</span>
|
||
<span class="special">-------------------------------------------------------------------------------</span>
|
||
<span class="identifier">d2</span>
|
||
</pre>
|
||
<p>
|
||
Dividing by d2
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span> <span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">)</span> <span class="special">/</span> <span class="special">(</span><span class="identifier">d1</span> <span class="special">/</span> <span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">))</span> <span class="special">)</span> <span class="special">*</span>
|
||
<span class="special">(</span> <span class="special">((</span><span class="identifier">n1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">+</span> <span class="special">((</span><span class="identifier">n2</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">n2</span><span class="special">))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">d1</span><span class="special">/</span><span class="identifier">gcd</span><span class="special">(</span><span class="identifier">d1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span> <span class="special">/</span> <span class="identifier">d2</span> <span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
This expression correspond to the multiply of two ratios that have less risk
|
||
of overflow as the initial numerators and denominators appear now in most
|
||
of the cases divided by a gcd.
|
||
</p>
|
||
<p>
|
||
For ratio_subtract the reasoning is the same.
|
||
</p>
|
||
<p>
|
||
<span class="bold"><strong>ratio_multiply</strong></span>
|
||
</p>
|
||
<p>
|
||
In
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span><span class="identifier">n1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)*(</span><span class="identifier">n2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)=((</span><span class="identifier">n1</span><span class="special">*</span><span class="identifier">n2</span><span class="special">)/(</span><span class="identifier">d1</span><span class="special">*</span><span class="identifier">d2</span><span class="special">))</span>
|
||
</pre>
|
||
<p>
|
||
either n1*n2 or d1*d2 can overflow.
|
||
</p>
|
||
<p>
|
||
Dividing by gcc(n1,d2) numerator and denominator
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(((</span><span class="identifier">n1</span><span class="special">/</span><span class="identifier">gcc</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">))*</span><span class="identifier">n2</span><span class="special">)</span>
|
||
<span class="special">---------------------</span>
|
||
<span class="special">(</span><span class="identifier">d1</span><span class="special">*(</span><span class="identifier">d2</span><span class="special">/</span><span class="identifier">gcc</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">))))</span>
|
||
</pre>
|
||
<p>
|
||
Dividing by gcc(n2,d1)
|
||
</p>
|
||
<pre class="programlisting"><span class="special">((</span><span class="identifier">n1</span><span class="special">/</span><span class="identifier">gcc</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">))*(</span><span class="identifier">n2</span><span class="special">/</span><span class="identifier">gcc</span><span class="special">(</span><span class="identifier">n2</span><span class="special">,</span><span class="identifier">d1</span><span class="special">)))</span>
|
||
<span class="special">---------------------------------</span>
|
||
<span class="special">((</span><span class="identifier">d1</span><span class="special">/</span><span class="identifier">gcc</span><span class="special">(</span><span class="identifier">n2</span><span class="special">,</span><span class="identifier">d1</span><span class="special">))*(</span><span class="identifier">d2</span><span class="special">/</span><span class="identifier">gcc</span><span class="special">(</span><span class="identifier">n1</span><span class="special">,</span><span class="identifier">d2</span><span class="special">)))</span>
|
||
</pre>
|
||
<p>
|
||
And now all the initial numerator and denominators have been reduced, avoiding
|
||
the overflow.
|
||
</p>
|
||
<p>
|
||
For ratio_divide the reasoning is similar.
|
||
</p>
|
||
<p>
|
||
<span class="bold"><strong>ratio_less</strong></span>
|
||
</p>
|
||
<p>
|
||
In order to evaluate
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span><span class="identifier">n1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)<(</span><span class="identifier">n2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
without moving to floating-point numbers, two techniques are used:
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
First compare the sign of the numerators.
|
||
</li></ul></div>
|
||
<p>
|
||
If sign(n1) < sign(n2) the result is true.
|
||
</p>
|
||
<p>
|
||
If sign(n1) == sign(n2) the result depends on the following after making
|
||
the numerators positive
|
||
</p>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
|
||
When the sign is equal the technique used is to work with integer division
|
||
and modulo when the signs are equal.
|
||
</li></ul></div>
|
||
<p>
|
||
Let call Qi the integer division of ni and di, and Mi the modulo of ni and
|
||
di.
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">ni</span> <span class="special">=</span> <span class="identifier">Qi</span> <span class="special">*</span> <span class="identifier">di</span> <span class="special">+</span> <span class="identifier">Mi</span> <span class="keyword">and</span> <span class="identifier">Mi</span> <span class="special"><</span> <span class="identifier">di</span>
|
||
</pre>
|
||
<p>
|
||
Form
|
||
</p>
|
||
<pre class="programlisting"><span class="special">((</span><span class="identifier">n1</span><span class="special">*</span><span class="identifier">d2</span><span class="special">)<(</span><span class="identifier">d1</span><span class="special">*</span><span class="identifier">n2</span><span class="special">))</span>
|
||
</pre>
|
||
<p>
|
||
we get
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(((</span><span class="identifier">Q1</span> <span class="special">*</span> <span class="identifier">d1</span> <span class="special">+</span> <span class="identifier">M1</span><span class="special">)*</span><span class="identifier">d2</span><span class="special">)<(</span><span class="identifier">d1</span><span class="special">*((</span><span class="identifier">Q2</span> <span class="special">*</span> <span class="identifier">d2</span> <span class="special">+</span> <span class="identifier">M2</span><span class="special">))))</span>
|
||
</pre>
|
||
<p>
|
||
Developing
|
||
</p>
|
||
<pre class="programlisting"><span class="special">((</span><span class="identifier">Q1</span> <span class="special">*</span> <span class="identifier">d1</span> <span class="special">*</span> <span class="identifier">d2</span><span class="special">)+</span> <span class="special">(</span><span class="identifier">M1</span><span class="special">*</span><span class="identifier">d2</span><span class="special">))<((</span><span class="identifier">d1</span> <span class="special">*</span> <span class="identifier">Q2</span> <span class="special">*</span> <span class="identifier">d2</span><span class="special">)</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">d1</span><span class="special">*</span><span class="identifier">M2</span><span class="special">))</span>
|
||
</pre>
|
||
<p>
|
||
Dividing by d1*d2
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">Q1</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">M1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)</span> <span class="special"><</span> <span class="identifier">Q2</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">M2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
If Q1=Q2 the result depends on
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span><span class="identifier">M1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)</span> <span class="special"><</span> <span class="special">(</span><span class="identifier">M2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
If M1==0==M2 the result is false
|
||
</p>
|
||
<p>
|
||
If M1=0 M2!=0 the result is true
|
||
</p>
|
||
<p>
|
||
If M1!=0 M2==0 the result is false
|
||
</p>
|
||
<p>
|
||
If M1!=0 M2!=0 the result depends on
|
||
</p>
|
||
<pre class="programlisting"><span class="special">(</span><span class="identifier">d2</span><span class="special">/</span><span class="identifier">M2</span><span class="special">)</span> <span class="special"><</span> <span class="special">(</span><span class="identifier">d1</span><span class="special">/</span><span class="identifier">M1</span><span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
If Q1!=Q2, the result of
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">Q1</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">M1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)</span> <span class="special"><</span> <span class="identifier">Q2</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">M2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
depends only on Q1 and Q2 as Qi are integers and (Mi/di) <1 because Mi<di.
|
||
</p>
|
||
<p>
|
||
if Q1>Q2, Q1==Q2+k, k>=1
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">Q2</span><span class="special">+</span><span class="identifier">k</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">M1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)</span> <span class="special"><</span> <span class="identifier">Q2</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">M2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)</span>
|
||
<span class="identifier">k</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">M1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)</span> <span class="special"><</span> <span class="special">(</span><span class="identifier">M2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)</span>
|
||
<span class="identifier">k</span> <span class="special"><</span> <span class="special">(</span><span class="identifier">M2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)</span> <span class="special">-</span> <span class="special">(</span><span class="identifier">M1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)</span>
|
||
</pre>
|
||
<p>
|
||
but the difference between two numbers between 0 and 1 can not be greater
|
||
than 1, so the result is false.
|
||
</p>
|
||
<p>
|
||
if Q2>Q1, Q2==Q1+k, k>=1
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">Q1</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">M1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)</span> <span class="special"><</span> <span class="identifier">Q1</span><span class="special">+</span><span class="identifier">k</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">M2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)</span>
|
||
<span class="special">(</span><span class="identifier">M1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)</span> <span class="special"><</span> <span class="identifier">k</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">M2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)</span>
|
||
<span class="special">(</span><span class="identifier">M1</span><span class="special">/</span><span class="identifier">d1</span><span class="special">)</span> <span class="special">-</span> <span class="special">(</span><span class="identifier">M2</span><span class="special">/</span><span class="identifier">d2</span><span class="special">)</span> <span class="special"><</span> <span class="identifier">k</span>
|
||
</pre>
|
||
<p>
|
||
which is always true, so the result is true.
|
||
</p>
|
||
<p>
|
||
The following table recapitulates this analisys
|
||
</p>
|
||
<div class="informaltable"><table class="table">
|
||
<colgroup>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
</colgroup>
|
||
<thead><tr>
|
||
<th>
|
||
<p>
|
||
ratio<n1,d1>
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
ratio<n2,d2>
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Q1
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Q2
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
M1
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
M2
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Result
|
||
</p>
|
||
</th>
|
||
</tr></thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio<n1,d1>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
ratio<n2,d2>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q1
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q2
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
!=0
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
!=0
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q1 < Q2
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio<n1,d1>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
ratio<n2,d2>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
0
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
0
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
false
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio<n1,d1>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
ratio<n2,d2>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
0
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
!=0
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
true
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio<n1,d1>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
ratio<n2,d2>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
!=0
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
0
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
false
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio<n1,d1>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
ratio<n2,d2>
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Q
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
!=0
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
!=0
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
ratio_less<ratio<d2,M2>, ratio<d1/M1>>
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></div>
|
||
</div>
|
||
<div class="section"><div class="titlepage"><div><div><h3 class="title">
|
||
<a name="ratio.appendices.faq"></a><a class="link" href="appendices.html#ratio.appendices.faq" title="Appendix D: FAQ">Appendix D: FAQ</a>
|
||
</h3></div></div></div></div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h3 class="title">
|
||
<a name="ratio.appendices.acknowledgements"></a><a class="link" href="appendices.html#ratio.appendices.acknowledgements" title="Appendix E: Acknowledgements">Appendix E: Acknowledgements</a>
|
||
</h3></div></div></div>
|
||
<p>
|
||
The library code was derived from Howard Hinnant's <code class="computeroutput"><span class="identifier">time2_demo</span></code>
|
||
prototype. Many thanks to Howard for making his code available under the
|
||
Boost license. The original code was modified by Beman Dawes to conform to
|
||
Boost conventions.
|
||
</p>
|
||
<p>
|
||
<code class="computeroutput"><span class="identifier">time2_demo</span></code> contained this
|
||
comment:
|
||
</p>
|
||
<p>
|
||
Much thanks to Andrei Alexandrescu, Walter Brown, Peter Dimov, Jeff Garland,
|
||
Terry Golubiewski, Daniel Krugler, Anthony Williams.
|
||
</p>
|
||
<p>
|
||
Howard Hinnant, who is the real author of the library, has provided valuable
|
||
feedback and suggestions during the development of the library. In particular,
|
||
The ratio_io.hpp source has been adapted from the experimental header <code class="computeroutput"><span class="special"><</span><span class="identifier">ratio_io</span><span class="special">></span></code> from Howard Hinnant.
|
||
</p>
|
||
<p>
|
||
The acceptance review of Boost.Ratio took place between October 2nd and 11th
|
||
2010. Many thanks to Anthony Williams, the review manager, and to all the
|
||
reviewers: Bruno Santos, Joel Falcou, Robert Stewart, Roland Bock, Tom Tan
|
||
and Paul A. Bristol.
|
||
</p>
|
||
<p>
|
||
Thanks to Andrew Chinoff and Paul A. Bristol for his help polishing the documentation.
|
||
</p>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h3 class="title">
|
||
<a name="ratio.appendices.tests"></a><a class="link" href="appendices.html#ratio.appendices.tests" title="Appendix F: Tests">Appendix F: Tests</a>
|
||
</h3></div></div></div>
|
||
<div class="toc"><dl class="toc">
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.tests._ratio_"><code class="computeroutput"><span class="identifier">ratio</span></code></a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.tests._comparison_"><code class="computeroutput"><span class="identifier">comparison</span></code></a></span></dt>
|
||
<dt><span class="section"><a href="appendices.html#ratio.appendices.tests._arithmetic_"><code class="computeroutput"><span class="identifier">arithmetic</span></code></a></span></dt>
|
||
</dl></div>
|
||
<p>
|
||
In order to test you need to run
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">bjam</span> <span class="identifier">libs</span><span class="special">/</span><span class="identifier">ratio</span><span class="special">/</span><span class="identifier">test</span>
|
||
</pre>
|
||
<p>
|
||
You can also run a specific suite of test by doing
|
||
</p>
|
||
<pre class="programlisting"><span class="identifier">cd</span> <span class="identifier">libs</span><span class="special">/</span><span class="identifier">chrono</span><span class="special">/</span><span class="identifier">test</span>
|
||
<span class="identifier">bjam</span> <span class="identifier">ratio</span>
|
||
</pre>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.tests._ratio_"></a><a class="link" href="appendices.html#ratio.appendices.tests._ratio_" title="ratio"><code class="computeroutput"><span class="identifier">ratio</span></code></a>
|
||
</h4></div></div></div>
|
||
<div class="informaltable"><table class="table">
|
||
<colgroup>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
</colgroup>
|
||
<thead><tr>
|
||
<th>
|
||
<p>
|
||
Name
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
kind
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Description
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Result
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Ticket
|
||
</p>
|
||
</th>
|
||
</tr></thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
typedefs.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check the num/den are correct for the predefined typedefs
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check the num/den are correctly simplified
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio1.fail
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
compile-fails
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
The template argument D shall not be zero
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio2.fail
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
compile-fails
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
the absolute values of the template arguments N and D shall be
|
||
representable by type intmax_t
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio3.fail
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
compile-fails
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
the absolute values of the template arguments N and D shall be
|
||
representable by type intmax_t
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.tests._comparison_"></a><a class="link" href="appendices.html#ratio.appendices.tests._comparison_" title="comparison"><code class="computeroutput"><span class="identifier">comparison</span></code></a>
|
||
</h4></div></div></div>
|
||
<div class="informaltable"><table class="table">
|
||
<colgroup>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
</colgroup>
|
||
<thead><tr>
|
||
<th>
|
||
<p>
|
||
Name
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
kind
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Description
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Result
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Ticket
|
||
</p>
|
||
</th>
|
||
</tr></thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_equal.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_equal metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_not_equal.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_not_equal metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_less.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_less metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_less_equal.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_less_equal metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_greater.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_greater metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_greater_equal.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_greater_equal metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h4 class="title">
|
||
<a name="ratio.appendices.tests._arithmetic_"></a><a class="link" href="appendices.html#ratio.appendices.tests._arithmetic_" title="arithmetic"><code class="computeroutput"><span class="identifier">arithmetic</span></code></a>
|
||
</h4></div></div></div>
|
||
<div class="informaltable"><table class="table">
|
||
<colgroup>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
</colgroup>
|
||
<thead><tr>
|
||
<th>
|
||
<p>
|
||
Name
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
kind
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Description
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Result
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Ticket
|
||
</p>
|
||
</th>
|
||
</tr></thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_add.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_add metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_subtract.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_subtract metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_multiply.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_multiply metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_divide.pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
run
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_divide metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_add.fail
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
compile-fails
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_add overflow metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_subtract.fail
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
compile-fails
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_subtract underflow metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_multiply.fail
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
compile-fails
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_multiply overflow metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
ratio_divide.fail
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
compile-fails
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
check ratio_divide overflow metafunction class
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Pass
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
#
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></div>
|
||
</div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h3 class="title">
|
||
<a name="ratio.appendices.tickets"></a><a class="link" href="appendices.html#ratio.appendices.tickets" title="Appendix G: Tickets">Appendix G: Tickets</a>
|
||
</h3></div></div></div>
|
||
<div class="informaltable"><table class="table">
|
||
<colgroup>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
<col>
|
||
</colgroup>
|
||
<thead><tr>
|
||
<th>
|
||
<p>
|
||
Ticket
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Description
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
Resolution
|
||
</p>
|
||
</th>
|
||
<th>
|
||
<p>
|
||
State
|
||
</p>
|
||
</th>
|
||
</tr></thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
1
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
result of metafunctions ratio_multiply and ratio_divide were not
|
||
normalized ratios.
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Use of the nested ratio typedef type on ratio arithmetic operations.
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Closed
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
2
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
INTMAX_C is not always defined.
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Replace INTMAX_C by BOOST_INTMAX_C until boost/cstdint.hpp ensures
|
||
INTMAX_C is always defined.
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Closed
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
3
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
MSVC reports a warning instead of an error when there is an integral
|
||
constant overflow.
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
manage with MSVC reporting a warning instead of an error when there
|
||
is an integral constant overflow.
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Closed
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<p>
|
||
4
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
ration_less overflow on cases where it can be avoided.
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Change the algorithm as implemented in libc++.
|
||
</p>
|
||
</td>
|
||
<td>
|
||
<p>
|
||
Closed
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table></div>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h3 class="title">
|
||
<a name="ratio.appendices.todo"></a><a class="link" href="appendices.html#ratio.appendices.todo" title="Appendix H: Future Plans">Appendix H: Future Plans</a>
|
||
</h3></div></div></div>
|
||
<h5>
|
||
<a name="ratio.appendices.todo.h0"></a>
|
||
<span class="phrase"><a name="ratio.appendices.todo.for_later_releases"></a></span><a class="link" href="appendices.html#ratio.appendices.todo.for_later_releases">For
|
||
later releases</a>
|
||
</h5>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Use template aliases on compiler providing it.
|
||
</li>
|
||
<li class="listitem">
|
||
Implement <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3135.html#3135" target="_top">multiple
|
||
arguments</a> ratio arithmetic.
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
</div>
|
||
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
||
<td align="left"></td>
|
||
<td align="right"><div class="copyright-footer">Copyright © 2008 Howard Hinnant<br>Copyright © 2006, 2008 Beman Dawes<br>Copyright © 2009-2012 Vicente
|
||
J. Botet Escriba<p>
|
||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
|
||
</p>
|
||
</div></td>
|
||
</tr></table>
|
||
<hr>
|
||
<div class="spirit-nav">
|
||
<a accesskey="p" href="reference.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ratio.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../signals2.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
|
||
</div>
|
||
</body>
|
||
</html>
|