Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / test / doc / html / boost_test / testing_tools / extended_comparison / floating_point.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Floating point comparison</title>
5 <link rel="stylesheet" href="../../../boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../../../index.html" title="Boost.Test">
8 <link rel="up" href="../extended_comparison.html" title="Extended comparisons support">
9 <link rel="prev" href="../extended_comparison.html" title="Extended comparisons support">
10 <link rel="next" href="floating_point/customizing_for_tolerance.html" title="Enabling tolerance for user-defined types">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="../extended_comparison.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../extended_comparison.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="floating_point/customizing_for_tolerance.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h4 class="title">
27 <a name="boost_test.testing_tools.extended_comparison.floating_point"></a><a class="link" href="floating_point.html" title="Floating point comparison">Floating
28         point comparison</a>
29 </h4></div></div></div>
30 <div class="toc"><dl class="toc">
31 <dt><span class="section"><a href="floating_point/customizing_for_tolerance.html">Enabling
32           tolerance for user-defined types</a></span></dt>
33 <dt><span class="section"><a href="floating_point/floating_points_comparison_impl.html">Tolerance-based
34           comparisons</a></span></dt>
35 <dt><span class="section"><a href="floating_point/floating_points_comparison_theory.html">Theory
36           behind floating point comparisons</a></span></dt>
37 </dl></div>
38 <p>
39           Unless specified otherwise, when a value of floating-point type is compared
40           inside a <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a> assertion, operators
41           <code class="computeroutput"><span class="special">==</span></code>, <code class="computeroutput"><span class="special">!=</span></code>
42           , <code class="computeroutput"><span class="special">&lt;</span></code> etc. defined for this
43           type are used. However for floating point type, in most cases what is needed
44           is not an <span class="emphasis"><em>exact</em></span> equality (or inequality), but a verification
45           that two numbers are <span class="emphasis"><em>sufficiently close</em></span> or <span class="emphasis"><em>sufficiently
46           different</em></span>. For that purpose, a <span class="bold"><strong>tolerance</strong></span>
47           parameter that will instruct the framework what is considered <span class="emphasis"><em>sufficiently
48           close</em></span> needs to provided.
49         </p>
50 <div class="note"><table border="0" summary="Note">
51 <tr>
52 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
53 <th align="left">Note</th>
54 </tr>
55 <tr><td align="left" valign="top"><p>
56             How the tolerance parameter is processed in detail is described <a class="link" href="floating_point/floating_points_comparison_impl.html" title="Tolerance-based comparisons">here</a>.
57           </p></td></tr>
58 </table></div>
59 <h5>
60 <a name="boost_test.testing_tools.extended_comparison.floating_point.h0"></a>
61           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.test_unit_tolerance"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.test_unit_tolerance">Test-unit
62           tolerance</a>
63         </h5>
64 <p>
65           It is possible to define a per-<a class="link" href="../../section_glossary.html#ref_test_unit">test unit</a>
66           tolerance for a given floating point type by using <a class="link" href="../../tests_organization/decorators.html" title="Decorators">decorator</a>
67           <a class="link" href="../../utf_reference/testing_tool_ref/decorator_tolerance.html" title="tolerance (decorator)"><code class="computeroutput"><span class="identifier">tolerance</span></code></a>:
68         </p>
69 <h6>
70 <a name="boost_test.testing_tools.extended_comparison.floating_point.h1"></a>
71           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.example_descr"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.example_descr">Example:
72           specifying tolerance per test case</a>
73         </h6>
74 <div class="informaltable"><table class="table">
75 <colgroup><col></colgroup>
76 <thead><tr><th>
77                   <p>
78                     Code
79                   </p>
80                 </th></tr></thead>
81 <tbody><tr><td>
82 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">tolerance_01</span>
83 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
84 <span class="keyword">namespace</span> <span class="identifier">utf</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">;</span>
85
86 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span><span class="identifier">test1</span><span class="special">,</span> <span class="special">*</span> <span class="identifier">utf</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.00001</span><span class="special">))</span>
87 <span class="special">{</span>
88   <span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">10.0000000</span><span class="special">;</span>
89   <span class="keyword">double</span> <span class="identifier">y</span> <span class="special">=</span> <span class="number">10.0000001</span><span class="special">;</span>
90   <span class="keyword">double</span> <span class="identifier">z</span> <span class="special">=</span> <span class="number">10.001</span><span class="special">;</span>
91   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">==</span> <span class="identifier">y</span><span class="special">);</span> <span class="comment">// irrelevant difference</span>
92   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">==</span> <span class="identifier">z</span><span class="special">);</span> <span class="comment">// relevant difference</span>
93 <span class="special">}</span>
94 </pre>
95                 </td></tr></tbody>
96 </table></div>
97 <div class="informaltable"><table class="table">
98 <colgroup><col></colgroup>
99 <thead><tr><th>
100                   <p>
101                     Output
102                   </p>
103                 </th></tr></thead>
104 <tbody><tr><td>
105 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="identifier">tolerance_01</span>
106 <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
107 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">11</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test1"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">x</span> <span class="special">==</span> <span class="identifier">z</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">10</span> <span class="special">!=</span> <span class="number">10.000999999999999</span><span class="special">].</span> <span class="identifier">Relative</span> <span class="identifier">difference</span> <span class="identifier">exceeds</span> <span class="identifier">tolerance</span> <span class="special">[</span><span class="number">0.0001</span> <span class="special">&gt;</span> <span class="number">1e-005</span><span class="special">]</span>
108
109 <span class="special">***</span> <span class="number">1</span> <span class="identifier">failure</span> <span class="identifier">is</span> <span class="identifier">detected</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"tolerance_01"</span>
110 </pre>
111                 </td></tr></tbody>
112 </table></div>
113 <h5>
114 <a name="boost_test.testing_tools.extended_comparison.floating_point.h2"></a>
115           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.assertion_tolerance"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.assertion_tolerance">Assertion
116           tolerance</a>
117         </h5>
118 <p>
119           It is possible to specify floating point comparison tolerance per single
120           assertion, by providing the <span class="emphasis"><em>manipulator</em></span> <code class="computeroutput"><a class="link" href="../../../boost/test_tools/tolerance.html" title="Function tolerance">boost::test_tools::tolerance</a></code>
121           as the second argument to <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a>:
122         </p>
123 <h6>
124 <a name="boost_test.testing_tools.extended_comparison.floating_point.h3"></a>
125           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.example_descr0"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.example_descr0">Example:
126           specifying tolerance per assertion</a>
127         </h6>
128 <div class="informaltable"><table class="table">
129 <colgroup><col></colgroup>
130 <thead><tr><th>
131                   <p>
132                     Code
133                   </p>
134                 </th></tr></thead>
135 <tbody><tr><td>
136 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">tolerance_02</span>
137 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
138 <span class="keyword">namespace</span> <span class="identifier">utf</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">;</span>
139 <span class="keyword">namespace</span> <span class="identifier">tt</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">;</span>
140
141 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span><span class="identifier">test1</span><span class="special">,</span> <span class="special">*</span> <span class="identifier">utf</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.00001</span><span class="special">))</span>
142 <span class="special">{</span>
143   <span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">10.0000000</span><span class="special">;</span>
144   <span class="keyword">double</span> <span class="identifier">y</span> <span class="special">=</span> <span class="number">10.0000001</span><span class="special">;</span>
145   <span class="keyword">double</span> <span class="identifier">z</span> <span class="special">=</span> <span class="number">10.001</span><span class="special">;</span>
146   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">==</span> <span class="identifier">y</span><span class="special">);</span> <span class="comment">// irrelevant by default</span>
147   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">==</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">tt</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.0</span><span class="special">));</span>
148
149   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">==</span> <span class="identifier">z</span><span class="special">);</span> <span class="comment">// relevant by default</span>
150   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">==</span> <span class="identifier">z</span><span class="special">,</span> <span class="identifier">tt</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.001</span><span class="special">));</span>
151 <span class="special">}</span>
152 </pre>
153                 </td></tr></tbody>
154 </table></div>
155 <div class="informaltable"><table class="table">
156 <colgroup><col></colgroup>
157 <thead><tr><th>
158                   <p>
159                     Output
160                   </p>
161                 </th></tr></thead>
162 <tbody><tr><td>
163 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="identifier">tolerance_02</span>
164 <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
165 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">12</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test1"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">x</span> <span class="special">==</span> <span class="identifier">y</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">10</span> <span class="special">!=</span> <span class="number">10.000000099999999</span><span class="special">]</span>
166 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">14</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test1"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">x</span> <span class="special">==</span> <span class="identifier">z</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">10</span> <span class="special">!=</span> <span class="number">10.000999999999999</span><span class="special">].</span> <span class="identifier">Relative</span> <span class="identifier">difference</span> <span class="identifier">exceeds</span> <span class="identifier">tolerance</span> <span class="special">[</span><span class="number">0.0001</span> <span class="special">&gt;</span> <span class="number">1e-005</span><span class="special">]</span>
167
168 <span class="special">***</span> <span class="number">2</span> <span class="identifier">failures</span> <span class="identifier">are</span> <span class="identifier">detected</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"tolerance_02"</span>
169 </pre>
170                 </td></tr></tbody>
171 </table></div>
172 <div class="caution"><table border="0" summary="Caution">
173 <tr>
174 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../doc/src/images/caution.png"></td>
175 <th align="left">Caution</th>
176 </tr>
177 <tr><td align="left" valign="top"><p>
178             Manipulators requires a compiler that supports variadic macros, <code class="computeroutput"><span class="keyword">auto</span></code> for type deduction and <code class="computeroutput"><span class="keyword">decltype</span></code>. These are C++11 features, but
179             are also available on some pre-C++11 compilers. On compilers that are
180             lacking these features, resort to defining tolerance per test unit or
181             to compatibility test assertions: <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_level_close.html" title="BOOST_&lt;level&gt;_CLOSE"><code class="computeroutput"><span class="identifier">BOOST_CHECK_CLOSE</span></code></a> and <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_level_small.html" title="BOOST_&lt;level&gt;_SMALL"><code class="computeroutput"><span class="identifier">BOOST_CHECK_SMALL</span></code></a>.
182           </p></td></tr>
183 </table></div>
184 <h5>
185 <a name="boost_test.testing_tools.extended_comparison.floating_point.h4"></a>
186           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.tolerance_expressed_in_percentag"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.tolerance_expressed_in_percentag">Tolerance
187           expressed in percentage</a>
188         </h5>
189 <p>
190           It is possible to specify the tolerance as percentage. At test unit level,
191           the decorator syntax is:
192         </p>
193 <pre class="programlisting"><span class="special">*</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">fpc</span><span class="special">::</span><span class="identifier">percent_tolerance</span><span class="special">(</span><span class="number">2.0</span><span class="special">)</span> <span class="special">)</span>
194 <span class="comment">// equivalent to: boost::unit_test::tolerance( 2.0 / 100 )</span>
195 </pre>
196 <p>
197           At assertion level, the manipulator syntax is:
198         </p>
199 <pre class="programlisting"><span class="number">2.0</span><span class="special">%</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">()</span>
200 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">fpc</span><span class="special">::</span><span class="identifier">percent_tolerance</span><span class="special">(</span><span class="number">2.0</span><span class="special">)</span> <span class="special">)</span>
201 <span class="comment">// both equivalent to: boost::test_tools::tolerance( 2.0 / 100 )</span>
202 </pre>
203 <h5>
204 <a name="boost_test.testing_tools.extended_comparison.floating_point.h5"></a>
205           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.type_of_the_tolerance"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.type_of_the_tolerance">Type
206           of the tolerance</a>
207         </h5>
208 <p>
209           Manipulator <code class="computeroutput"><span class="identifier">tolerance</span></code> specifies
210           the tolerance only for a single floating-point type. This type is deduced
211           from form the numeric value passed along the manipulator:
212         </p>
213 <div class="informaltable"><table class="table">
214 <colgroup>
215 <col>
216 <col>
217 </colgroup>
218 <thead><tr>
219 <th>
220                   <p>
221                     expression
222                   </p>
223                 </th>
224 <th>
225                   <p>
226                     semantics
227                   </p>
228                 </th>
229 </tr></thead>
230 <tbody>
231 <tr>
232 <td>
233                   <p>
234                     <code class="computeroutput"><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.5</span><span class="special">)</span></code>
235                   </p>
236                 </td>
237 <td>
238                   <p>
239                     tolerance for type <code class="computeroutput"><span class="keyword">double</span></code>
240                     changed to 0.5
241                   </p>
242                 </td>
243 </tr>
244 <tr>
245 <td>
246                   <p>
247                     <code class="computeroutput"><span class="identifier">tolerance</span><span class="special">(</span><span class="keyword">float</span><span class="special">(</span><span class="number">0.5</span><span class="special">))</span></code>
248                   </p>
249                 </td>
250 <td>
251                   <p>
252                     tolerance for type <code class="computeroutput"><span class="keyword">float</span></code>
253                     changed to 0.5
254                   </p>
255                 </td>
256 </tr>
257 <tr>
258 <td>
259                   <p>
260                     <code class="computeroutput"><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.5f</span><span class="special">)</span></code>
261                   </p>
262                 </td>
263 <td>
264                   <p>
265                     tolerance for type <code class="computeroutput"><span class="keyword">float</span></code>
266                     changed to 0.5
267                   </p>
268                 </td>
269 </tr>
270 <tr>
271 <td>
272                   <p>
273                     <code class="computeroutput"><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.5L</span><span class="special">)</span></code>
274                   </p>
275                 </td>
276 <td>
277                   <p>
278                     tolerance for type <code class="computeroutput"><span class="keyword">long</span>
279                     <span class="keyword">double</span></code> changed to 0.5
280                   </p>
281                 </td>
282 </tr>
283 <tr>
284 <td>
285                   <p>
286                     <code class="computeroutput"><span class="identifier">tolerance</span><span class="special">(</span><span class="identifier">Decimal</span><span class="special">(</span><span class="string">"0.5"</span><span class="special">))</span></code>
287                   </p>
288                 </td>
289 <td>
290                   <p>
291                     tolerance for a user-defined type <code class="computeroutput"><span class="identifier">Decimal</span></code>
292                     changed to the supplied value
293                   </p>
294                 </td>
295 </tr>
296 <tr>
297 <td>
298                   <p>
299                     <code class="computeroutput"><span class="number">5.0</span><span class="special">%</span>
300                     <span class="identifier">tolerance</span><span class="special">()</span></code>
301                   </p>
302                 </td>
303 <td>
304                   <p>
305                     tolerance for type <code class="computeroutput"><span class="keyword">double</span></code>
306                     changed to 0.05 (<code class="computeroutput"><span class="number">5.0</span> <span class="special">/</span> <span class="number">100</span></code>)
307                   </p>
308                 </td>
309 </tr>
310 <tr>
311 <td>
312                   <p>
313                     <code class="computeroutput"><span class="number">5.0f</span><span class="special">%</span>
314                     <span class="identifier">tolerance</span><span class="special">()</span></code>
315                   </p>
316                 </td>
317 <td>
318                   <p>
319                     tolerance for type <code class="computeroutput"><span class="keyword">float</span></code>
320                     changed to 0.05
321                   </p>
322                 </td>
323 </tr>
324 <tr>
325 <td>
326                   <p>
327                     <code class="computeroutput"><span class="identifier">Decimal</span><span class="special">(</span><span class="string">"5.0"</span><span class="special">)%</span>
328                     <span class="identifier">tolerance</span><span class="special">()</span></code>
329                   </p>
330                 </td>
331 <td>
332                   <p>
333                     tolerance for type <code class="computeroutput"><span class="identifier">Decimal</span></code>
334                     changed to value <code class="computeroutput"><span class="special">(</span><span class="identifier">Decimal</span><span class="special">(</span><span class="string">"5.0"</span><span class="special">)</span>
335                     <span class="special">/</span> <span class="number">100</span><span class="special">)</span></code>
336                   </p>
337                 </td>
338 </tr>
339 </tbody>
340 </table></div>
341 <p>
342           This is also the case for decorator <code class="computeroutput"><span class="identifier">tolerance</span></code>.
343           In the case of the decorator however, it is possible to apply multiple
344           decorators <code class="computeroutput"><span class="identifier">tolerance</span></code> defining
345           the tolerance for different types.
346         </p>
347 <p>
348           When values of two different floating point types <code class="computeroutput"><span class="identifier">T</span></code>
349           and <code class="computeroutput"><span class="identifier">U</span></code> are compared, <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a> uses the tolerance
350           specified for type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;::</span><span class="identifier">type</span></code>. For instance, when setting a tolerance
351           for mixed <code class="computeroutput"><span class="keyword">float</span></code>-to-<code class="computeroutput"><span class="keyword">double</span></code> comparison, the tolerance for type
352           <code class="computeroutput"><span class="keyword">double</span></code> needs to be set.
353         </p>
354 <p>
355           Given two floating point types <code class="computeroutput"><span class="identifier">T</span></code>
356           and <code class="computeroutput"><span class="identifier">U</span></code> and their common
357           type <code class="computeroutput"><span class="identifier">C</span></code>, the tolerance specified
358           for type <code class="computeroutput"><span class="identifier">C</span></code> is applied only
359           when types <code class="computeroutput"><span class="identifier">T</span></code> and <code class="computeroutput"><span class="identifier">U</span></code> appear as sub-expressions of the full
360           expression inside assertion <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a>. It is not applied
361           when <code class="computeroutput"><span class="identifier">T</span></code> and <code class="computeroutput"><span class="identifier">U</span></code> are compared inside a function invoked
362           during the evaluation of the expression:
363         </p>
364 <h6>
365 <a name="boost_test.testing_tools.extended_comparison.floating_point.h6"></a>
366           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.example_descr1"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.example_descr1">Example:
367           tolerance applied to different types</a>
368         </h6>
369 <div class="informaltable"><table class="table">
370 <colgroup><col></colgroup>
371 <thead><tr><th>
372                   <p>
373                     Code
374                   </p>
375                 </th></tr></thead>
376 <tbody><tr><td>
377 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">tolerance_05</span>
378 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
379 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">optional</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
380 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">optional</span><span class="special">/</span><span class="identifier">optional_io</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
381
382 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span><span class="identifier">test</span><span class="special">,</span> <span class="special">*</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.02</span><span class="special">))</span>
383 <span class="special">{</span>
384   <span class="keyword">double</span>                  <span class="identifier">d1</span> <span class="special">=</span> <span class="number">1.00</span><span class="special">,</span> <span class="identifier">d2</span> <span class="special">=</span> <span class="number">0.99</span><span class="special">;</span>
385   <span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">o1</span> <span class="special">=</span> <span class="number">1.00</span><span class="special">,</span> <span class="identifier">o2</span> <span class="special">=</span> <span class="number">0.99</span><span class="special">;</span>
386
387   <span class="identifier">BOOST_TEST</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="comment">// with tolerance    (double vs. double)</span>
388   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">o1</span> <span class="special">==</span> <span class="identifier">o2</span><span class="special">);</span>   <span class="comment">// without tolerance (optional vs. optional)</span>
389   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">o1</span> <span class="special">==</span> <span class="identifier">d2</span><span class="special">);</span>   <span class="comment">// without tolerance (optional vs. double)</span>
390   <span class="identifier">BOOST_TEST</span><span class="special">(*</span><span class="identifier">o1</span> <span class="special">==</span> <span class="special">*</span><span class="identifier">o2</span><span class="special">);</span> <span class="comment">// with tolerance    (double vs. double)</span>
391 <span class="special">}</span>
392 </pre>
393                 </td></tr></tbody>
394 </table></div>
395 <div class="informaltable"><table class="table">
396 <colgroup><col></colgroup>
397 <thead><tr><th>
398                   <p>
399                     Output
400                   </p>
401                 </th></tr></thead>
402 <tbody><tr><td>
403 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="identifier">tolerance_05</span>
404 <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
405 <span class="special">../</span><span class="identifier">doc</span><span class="special">/</span><span class="identifier">examples</span><span class="special">/</span><span class="identifier">tolerance_05</span><span class="special">.</span><span class="identifier">run</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">20</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">o1</span> <span class="special">==</span> <span class="identifier">o2</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span> <span class="number">1</span> <span class="special">!=</span>  <span class="number">0.99</span><span class="special">]</span>
406 <span class="special">../</span><span class="identifier">doc</span><span class="special">/</span><span class="identifier">examples</span><span class="special">/</span><span class="identifier">tolerance_05</span><span class="special">.</span><span class="identifier">run</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">21</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">o1</span> <span class="special">==</span> <span class="identifier">d2</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span> <span class="number">1</span> <span class="special">!=</span> <span class="number">0.98999999999999999</span><span class="special">]</span>
407
408 <span class="special">***</span> <span class="number">2</span> <span class="identifier">failures</span> <span class="identifier">are</span> <span class="identifier">detected</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"tolerance_05"</span>
409 </pre>
410                 </td></tr></tbody>
411 </table></div>
412 <h5>
413 <a name="boost_test.testing_tools.extended_comparison.floating_point.h7"></a>
414           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.type_promotion_of_the_operands"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.type_promotion_of_the_operands">Type
415           promotion of the operands</a>
416         </h5>
417 <p>
418           Given two types <code class="computeroutput"><span class="identifier">T</span></code> and
419           <code class="computeroutput"><span class="identifier">U</span></code> being compared inside
420           an assertion <a class="link" href="../../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a>, tolerance based comparison
421           is invoked
422         </p>
423 <div class="orderedlist"><ol class="orderedlist" type="1">
424 <li class="listitem">
425               whenever the types <code class="computeroutput"><span class="identifier">T</span></code>
426               and <code class="computeroutput"><span class="identifier">U</span></code> are both <a class="link" href="floating_point/customizing_for_tolerance.html" title="Enabling tolerance for user-defined types">tolerance
427               based</a> types
428             </li>
429 <li class="listitem">
430               whenever <code class="computeroutput"><span class="identifier">T</span></code> is <span class="emphasis"><em>tolerance</em></span>
431               based and <code class="computeroutput"><span class="identifier">U</span></code> is <span class="emphasis"><em>arithmetic</em></span>,
432               in the sense that <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;::</span><span class="identifier">value</span></code>
433               evaluates to <code class="computeroutput"><span class="keyword">true</span></code> (or
434               the other way round)
435             </li>
436 </ol></div>
437 <p>
438           In all cases, the type of the tolerance is deduced as <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">common_type</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;::</span><span class="identifier">type</span></code>, and both type may be cast to this
439           tolerance type.
440         </p>
441 <div class="note"><table border="0" summary="Note">
442 <tr>
443 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
444 <th align="left">Note</th>
445 </tr>
446 <tr><td align="left" valign="top">
447 <p>
448             This behavior has been introduced in Boost 1.70 / <span class="emphasis"><em>Unit Test
449             Framework</em></span> <a class="link" href="../../change_log.html#ref_CHANGE_LOG_3_10">3.10</a>.
450             Previously tolerance based comparison was used only when the type of
451             the two operands were tolerance based types, which was silently ignoring
452             the tolerance for expressions such as
453           </p>
454 <pre class="programlisting"><span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">1E-9</span><span class="special">;</span>
455 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">==</span> <span class="number">0</span><span class="special">);</span> <span class="comment">// U is int</span>
456 </pre>
457 </td></tr>
458 </table></div>
459 <h6>
460 <a name="boost_test.testing_tools.extended_comparison.floating_point.h8"></a>
461           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.example_descr2"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.example_descr2">Example:
462           operands type promotion</a>
463         </h6>
464 <div class="informaltable"><table class="table">
465 <colgroup><col></colgroup>
466 <thead><tr><th>
467                   <p>
468                     Code
469                   </p>
470                 </th></tr></thead>
471 <tbody><tr><td>
472 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">tolerance_06</span>
473 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
474 <span class="keyword">namespace</span> <span class="identifier">utf</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">;</span>
475 <span class="keyword">namespace</span> <span class="identifier">tt</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">;</span>
476
477 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span><span class="identifier">test1</span><span class="special">,</span> <span class="special">*</span> <span class="identifier">utf</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.1415</span> <span class="special">/</span> <span class="number">3</span><span class="special">))</span> <span class="comment">// == 0.047166667</span>
478 <span class="special">{</span>
479   <span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">3.141592404915836</span><span class="special">;</span>
480   <span class="comment">// x is 'double' which is tolerance based, 3 is 'int' which is arithmetic:</span>
481   <span class="comment">// tolerance based comparison will be used.</span>
482   <span class="comment">// Type of tolerance for this comparison will be boost::common_type&lt;double, int&gt;::type == double</span>
483   <span class="comment">// Value for this tolerance type is set by the decorator.</span>
484   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">==</span> <span class="number">3</span><span class="special">);</span>
485 <span class="special">}</span>
486 </pre>
487                 </td></tr></tbody>
488 </table></div>
489 <div class="informaltable"><table class="table">
490 <colgroup><col></colgroup>
491 <thead><tr><th>
492                   <p>
493                     Output
494                   </p>
495                 </th></tr></thead>
496 <tbody><tr><td>
497 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="identifier">tolerance_06</span>
498 <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
499 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">21</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test1"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">x</span> <span class="special">==</span> <span class="number">3</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">3.1415924049158361</span> <span class="special">!=</span> <span class="number">3</span><span class="special">].</span> <span class="identifier">Relative</span> <span class="identifier">difference</span> <span class="identifier">exceeds</span> <span class="identifier">tolerance</span> <span class="special">[</span><span class="number">0.0471975</span> <span class="special">&gt;</span> <span class="number">0.0471667</span><span class="special">]</span>
500
501 <span class="special">***</span> <span class="number">1</span> <span class="identifier">failure</span> <span class="identifier">is</span> <span class="identifier">detected</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"tolerance_06"</span>
502 </pre>
503                 </td></tr></tbody>
504 </table></div>
505 <h5>
506 <a name="boost_test.testing_tools.extended_comparison.floating_point.h9"></a>
507           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.other_relational_operators"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.other_relational_operators">Other
508           relational operators</a>
509         </h5>
510 <p>
511           Finally, note that comparisons for tolerance are also applied to <code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;</span></code>
512           with semantics <span class="emphasis"><em>less by more than some tolerance</em></span>, and
513           other relational operators. Also, the tolerance-based comparisons are involved
514           when a more complicated expression tree is processed within the assertion
515           body. The section on <a class="link" href="floating_point/floating_points_comparison_impl.html#boost_test.testing_tools.extended_comparison.floating_point.floating_points_comparison_impl.tolerance_in_operator">relational
516           operators</a> defines how <code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;</span></code> relates to tolerance.
517         </p>
518 <h6>
519 <a name="boost_test.testing_tools.extended_comparison.floating_point.h10"></a>
520           <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.floating_point.example_descr3"></a></span><a class="link" href="floating_point.html#boost_test.testing_tools.extended_comparison.floating_point.example_descr3">Example:
521           tolerance applied in more complex expressions</a>
522         </h6>
523 <div class="informaltable"><table class="table">
524 <colgroup><col></colgroup>
525 <thead><tr><th>
526                   <p>
527                     Code
528                   </p>
529                 </th></tr></thead>
530 <tbody><tr><td>
531 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">tolerance_03</span>
532 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
533 <span class="keyword">namespace</span> <span class="identifier">utf</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">;</span>
534
535 <span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">10.000000</span><span class="special">;</span>
536 <span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span>  <span class="number">0.000001</span><span class="special">;</span>
537
538 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span><span class="identifier">passing</span><span class="special">,</span> <span class="special">*</span> <span class="identifier">utf</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.0001</span><span class="special">))</span>
539 <span class="special">{</span>
540   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">==</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">d</span><span class="special">);</span> <span class="comment">// equal with tolerance</span>
541   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">&gt;=</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">d</span><span class="special">);</span> <span class="comment">// ==&gt; greater-or-equal</span>
542
543   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">d</span> <span class="special">==</span> <span class="special">.</span><span class="number">0</span><span class="special">);</span>    <span class="comment">// small with tolerance</span>
544 <span class="special">}</span>
545
546 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span><span class="identifier">failing</span><span class="special">,</span> <span class="special">*</span> <span class="identifier">utf</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.0001</span><span class="special">))</span>
547 <span class="special">{</span>
548   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">-</span> <span class="identifier">d</span> <span class="special">&lt;</span>  <span class="identifier">x</span><span class="special">);</span> <span class="comment">// less, but still too close</span>
549   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">x</span> <span class="special">-</span> <span class="identifier">d</span> <span class="special">!=</span> <span class="identifier">x</span><span class="special">);</span> <span class="comment">// unequal but too close</span>
550
551   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">d</span> <span class="special">&gt;</span> <span class="special">.</span><span class="number">0</span><span class="special">);</span>     <span class="comment">// positive, but too small</span>
552   <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">d</span> <span class="special">&lt;</span> <span class="special">.</span><span class="number">0</span><span class="special">);</span>     <span class="comment">// not sufficiently negative</span>
553 <span class="special">}</span>
554 </pre>
555                 </td></tr></tbody>
556 </table></div>
557 <div class="informaltable"><table class="table">
558 <colgroup><col></colgroup>
559 <thead><tr><th>
560                   <p>
561                     Output
562                   </p>
563                 </th></tr></thead>
564 <tbody><tr><td>
565 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="identifier">tolerance_03</span>
566 <span class="identifier">Running</span> <span class="number">2</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
567 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">18</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"failing"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">x</span> <span class="special">-</span> <span class="identifier">d</span> <span class="special">&lt;</span> <span class="identifier">x</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">10</span> <span class="special">-</span> <span class="number">1.0000000000000001e-05</span> <span class="special">&gt;=</span> <span class="number">10</span><span class="special">].</span> <span class="identifier">Relative</span> <span class="identifier">difference</span> <span class="identifier">is</span> <span class="identifier">within</span> <span class="identifier">tolerance</span> <span class="special">[</span><span class="number">1e-06</span> <span class="special">&lt;</span> <span class="number">0.001</span><span class="special">]</span>
568 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">19</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"failing"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">x</span> <span class="special">-</span> <span class="identifier">d</span> <span class="special">!=</span> <span class="identifier">x</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">10</span> <span class="special">-</span> <span class="number">1.0000000000000001e-05</span> <span class="special">==</span> <span class="number">10</span><span class="special">].</span> <span class="identifier">Relative</span> <span class="identifier">difference</span> <span class="identifier">is</span> <span class="identifier">within</span> <span class="identifier">tolerance</span> <span class="special">[</span><span class="number">1e-06</span> <span class="special">&lt;</span> <span class="number">0.001</span><span class="special">]</span>
569 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">21</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"failing"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">d</span> <span class="special">&gt;</span> <span class="special">.</span><span class="number">0</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">1.0000000000000001e-05</span> <span class="special">&lt;=</span> <span class="number">0</span><span class="special">].</span> <span class="identifier">Absolute</span> <span class="identifier">value</span> <span class="identifier">is</span> <span class="identifier">within</span> <span class="identifier">tolerance</span> <span class="special">[|</span><span class="number">1e-05</span><span class="special">|</span> <span class="special">&lt;</span> <span class="number">0.001</span><span class="special">]</span>
570 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">22</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"failing"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">d</span> <span class="special">&lt;</span> <span class="special">.</span><span class="number">0</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">1.0000000000000001e-05</span> <span class="special">&gt;=</span> <span class="number">0</span><span class="special">]</span>
571
572 <span class="special">***</span> <span class="number">4</span> <span class="identifier">failures</span> <span class="identifier">are</span> <span class="identifier">detected</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"tolerance_03"</span>
573 </pre>
574                 </td></tr></tbody>
575 </table></div>
576 </div>
577 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
578 <td align="left"></td>
579 <td align="right"><div class="copyright-footer">Copyright &#169; 2001-2019 Boost.Test
580       contributors<p>
581         Distributed under the Boost Software License, Version 1.0. (See accompanying
582         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>)
583       </p>
584 </div></td>
585 </tr></table>
586 <hr>
587 <div class="spirit-nav">
588 <a accesskey="p" href="../extended_comparison.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../extended_comparison.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="floating_point/customizing_for_tolerance.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
589 </div>
590 </body>
591 </html>