real_concepts.html 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>Conceptual Requirements for Real Number Types</title>
  5. <link rel="stylesheet" href="../math.css" type="text/css">
  6. <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
  7. <link rel="home" href="../index.html" title="Math Toolkit 2.11.0">
  8. <link rel="up" href="../using_udt.html" title="Chapter&#160;19.&#160;Use with User-Defined Floating-Point Types - Boost.Multiprecision and others">
  9. <link rel="prev" href="high_precision/using_test.html" title="Using without expression templates for Boost.Test and others">
  10. <link rel="next" href="dist_concept.html" title="Conceptual Requirements for Distribution 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="high_precision/using_test.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../using_udt.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="dist_concept.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
  24. </div>
  25. <div class="section">
  26. <div class="titlepage"><div><div><h2 class="title" style="clear: both">
  27. <a name="math_toolkit.real_concepts"></a><a class="link" href="real_concepts.html" title="Conceptual Requirements for Real Number Types">Conceptual Requirements for
  28. Real Number Types</a>
  29. </h2></div></div></div>
  30. <p>
  31. The functions and statistical distributions in this library can be used with
  32. any type <span class="emphasis"><em>RealType</em></span> that meets the conceptual requirements
  33. given below. All the built-in floating-point types like <code class="computeroutput"><span class="keyword">double</span></code>
  34. will meet these requirements. (Built-in types are also called <a href="http://en.cppreference.com/w/cpp/language/types" target="_top">fundamental
  35. (built-in) types</a>).
  36. </p>
  37. <p>
  38. User-defined types that meet the conceptual requirements can also be used.
  39. For example, with <a class="link" href="high_precision/use_ntl.html" title="Using NTL Library">a thin
  40. wrapper class</a> one of the types provided with <a href="http://shoup.net/ntl/" target="_top">NTL
  41. (RR)</a> can be used. But now that <a href="../../../../../libs/multiprecision/doc/html/index.html" target="_top">Boost.Multiprecision</a>
  42. library is available, this has become the preferred real-number type, typically
  43. <a href="../../../../../libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html" target="_top">cpp_dec_float</a>
  44. or <a href="../../../../../libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html" target="_top">cpp_bin_float</a>.
  45. </p>
  46. <p>
  47. Submissions of binding to other extended precision types would also still be
  48. welcome.
  49. </p>
  50. <p>
  51. The guiding principal behind these requirements is that a <span class="emphasis"><em>RealType</em></span>
  52. behaves just like a built-in floating-point type.
  53. </p>
  54. <h5>
  55. <a name="math_toolkit.real_concepts.h0"></a>
  56. <span class="phrase"><a name="math_toolkit.real_concepts.basic_arithmetic_requirements"></a></span><a class="link" href="real_concepts.html#math_toolkit.real_concepts.basic_arithmetic_requirements">Basic Arithmetic
  57. Requirements</a>
  58. </h5>
  59. <p>
  60. These requirements are common to all of the functions in this library.
  61. </p>
  62. <p>
  63. In the following table <span class="emphasis"><em>r</em></span> is an object of type <code class="computeroutput"><span class="identifier">RealType</span></code>, <span class="emphasis"><em>cr</em></span> and <span class="emphasis"><em>cr2</em></span>
  64. are objects of type <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">RealType</span></code>,
  65. and <span class="emphasis"><em>ca</em></span> is an object of type <code class="computeroutput"><span class="keyword">const</span>
  66. <span class="identifier">arithmetic</span><span class="special">-</span><span class="identifier">type</span></code> (arithmetic types include all the built
  67. in integers and floating point types).
  68. </p>
  69. <div class="informaltable"><table class="table">
  70. <colgroup>
  71. <col>
  72. <col>
  73. <col>
  74. </colgroup>
  75. <thead><tr>
  76. <th>
  77. <p>
  78. Expression
  79. </p>
  80. </th>
  81. <th>
  82. <p>
  83. Result Type
  84. </p>
  85. </th>
  86. <th>
  87. <p>
  88. Notes
  89. </p>
  90. </th>
  91. </tr></thead>
  92. <tbody>
  93. <tr>
  94. <td>
  95. <p>
  96. <code class="computeroutput"><span class="identifier">RealType</span><span class="special">(</span><span class="identifier">cr</span><span class="special">)</span></code>
  97. </p>
  98. </td>
  99. <td>
  100. <p>
  101. RealType
  102. </p>
  103. </td>
  104. <td>
  105. <p>
  106. RealType is copy constructible.
  107. </p>
  108. </td>
  109. </tr>
  110. <tr>
  111. <td>
  112. <p>
  113. <code class="computeroutput"><span class="identifier">RealType</span><span class="special">(</span><span class="identifier">ca</span><span class="special">)</span></code>
  114. </p>
  115. </td>
  116. <td>
  117. <p>
  118. RealType
  119. </p>
  120. </td>
  121. <td>
  122. <p>
  123. RealType is copy constructible from the arithmetic types.
  124. </p>
  125. </td>
  126. </tr>
  127. <tr>
  128. <td>
  129. <p>
  130. <code class="computeroutput"><span class="identifier">r</span> <span class="special">=</span>
  131. <span class="identifier">cr</span></code>
  132. </p>
  133. </td>
  134. <td>
  135. <p>
  136. RealType&amp;
  137. </p>
  138. </td>
  139. <td>
  140. <p>
  141. Assignment operator.
  142. </p>
  143. </td>
  144. </tr>
  145. <tr>
  146. <td>
  147. <p>
  148. <code class="computeroutput"><span class="identifier">r</span> <span class="special">=</span>
  149. <span class="identifier">ca</span></code>
  150. </p>
  151. </td>
  152. <td>
  153. <p>
  154. RealType&amp;
  155. </p>
  156. </td>
  157. <td>
  158. <p>
  159. Assignment operator from the arithmetic types.
  160. </p>
  161. </td>
  162. </tr>
  163. <tr>
  164. <td>
  165. <p>
  166. <code class="computeroutput"><span class="identifier">r</span> <span class="special">+=</span>
  167. <span class="identifier">cr</span></code>
  168. </p>
  169. </td>
  170. <td>
  171. <p>
  172. RealType&amp;
  173. </p>
  174. </td>
  175. <td>
  176. <p>
  177. Adds cr to r.
  178. </p>
  179. </td>
  180. </tr>
  181. <tr>
  182. <td>
  183. <p>
  184. <code class="computeroutput"><span class="identifier">r</span> <span class="special">+=</span>
  185. <span class="identifier">ca</span></code>
  186. </p>
  187. </td>
  188. <td>
  189. <p>
  190. RealType&amp;
  191. </p>
  192. </td>
  193. <td>
  194. <p>
  195. Adds ar to r.
  196. </p>
  197. </td>
  198. </tr>
  199. <tr>
  200. <td>
  201. <p>
  202. <code class="computeroutput"><span class="identifier">r</span> <span class="special">-=</span>
  203. <span class="identifier">cr</span></code>
  204. </p>
  205. </td>
  206. <td>
  207. <p>
  208. RealType&amp;
  209. </p>
  210. </td>
  211. <td>
  212. <p>
  213. Subtracts cr from r.
  214. </p>
  215. </td>
  216. </tr>
  217. <tr>
  218. <td>
  219. <p>
  220. <code class="computeroutput"><span class="identifier">r</span> <span class="special">-=</span>
  221. <span class="identifier">ca</span></code>
  222. </p>
  223. </td>
  224. <td>
  225. <p>
  226. RealType&amp;
  227. </p>
  228. </td>
  229. <td>
  230. <p>
  231. Subtracts ca from r.
  232. </p>
  233. </td>
  234. </tr>
  235. <tr>
  236. <td>
  237. <p>
  238. <code class="computeroutput"><span class="identifier">r</span> <span class="special">*=</span>
  239. <span class="identifier">cr</span></code>
  240. </p>
  241. </td>
  242. <td>
  243. <p>
  244. RealType&amp;
  245. </p>
  246. </td>
  247. <td>
  248. <p>
  249. Multiplies r by cr.
  250. </p>
  251. </td>
  252. </tr>
  253. <tr>
  254. <td>
  255. <p>
  256. <code class="computeroutput"><span class="identifier">r</span> <span class="special">*=</span>
  257. <span class="identifier">ca</span></code>
  258. </p>
  259. </td>
  260. <td>
  261. <p>
  262. RealType&amp;
  263. </p>
  264. </td>
  265. <td>
  266. <p>
  267. Multiplies r by ca.
  268. </p>
  269. </td>
  270. </tr>
  271. <tr>
  272. <td>
  273. <p>
  274. <code class="computeroutput"><span class="identifier">r</span> <span class="special">/=</span>
  275. <span class="identifier">cr</span></code>
  276. </p>
  277. </td>
  278. <td>
  279. <p>
  280. RealType&amp;
  281. </p>
  282. </td>
  283. <td>
  284. <p>
  285. Divides r by cr.
  286. </p>
  287. </td>
  288. </tr>
  289. <tr>
  290. <td>
  291. <p>
  292. <code class="computeroutput"><span class="identifier">r</span> <span class="special">/=</span>
  293. <span class="identifier">ca</span></code>
  294. </p>
  295. </td>
  296. <td>
  297. <p>
  298. RealType&amp;
  299. </p>
  300. </td>
  301. <td>
  302. <p>
  303. Divides r by ca.
  304. </p>
  305. </td>
  306. </tr>
  307. <tr>
  308. <td>
  309. <p>
  310. <code class="computeroutput"><span class="special">-</span><span class="identifier">r</span></code>
  311. </p>
  312. </td>
  313. <td>
  314. <p>
  315. RealType
  316. </p>
  317. </td>
  318. <td>
  319. <p>
  320. Unary Negation.
  321. </p>
  322. </td>
  323. </tr>
  324. <tr>
  325. <td>
  326. <p>
  327. <code class="computeroutput"><span class="special">+</span><span class="identifier">r</span></code>
  328. </p>
  329. </td>
  330. <td>
  331. <p>
  332. RealType&amp;
  333. </p>
  334. </td>
  335. <td>
  336. <p>
  337. Identity Operation.
  338. </p>
  339. </td>
  340. </tr>
  341. <tr>
  342. <td>
  343. <p>
  344. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">+</span>
  345. <span class="identifier">cr2</span></code>
  346. </p>
  347. </td>
  348. <td>
  349. <p>
  350. RealType
  351. </p>
  352. </td>
  353. <td>
  354. <p>
  355. Binary Addition
  356. </p>
  357. </td>
  358. </tr>
  359. <tr>
  360. <td>
  361. <p>
  362. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">+</span>
  363. <span class="identifier">ca</span></code>
  364. </p>
  365. </td>
  366. <td>
  367. <p>
  368. RealType
  369. </p>
  370. </td>
  371. <td>
  372. <p>
  373. Binary Addition
  374. </p>
  375. </td>
  376. </tr>
  377. <tr>
  378. <td>
  379. <p>
  380. <code class="computeroutput"><span class="identifier">ca</span> <span class="special">+</span>
  381. <span class="identifier">cr</span></code>
  382. </p>
  383. </td>
  384. <td>
  385. <p>
  386. RealType
  387. </p>
  388. </td>
  389. <td>
  390. <p>
  391. Binary Addition
  392. </p>
  393. </td>
  394. </tr>
  395. <tr>
  396. <td>
  397. <p>
  398. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">-</span>
  399. <span class="identifier">cr2</span></code>
  400. </p>
  401. </td>
  402. <td>
  403. <p>
  404. RealType
  405. </p>
  406. </td>
  407. <td>
  408. <p>
  409. Binary Subtraction
  410. </p>
  411. </td>
  412. </tr>
  413. <tr>
  414. <td>
  415. <p>
  416. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">-</span>
  417. <span class="identifier">ca</span></code>
  418. </p>
  419. </td>
  420. <td>
  421. <p>
  422. RealType
  423. </p>
  424. </td>
  425. <td>
  426. <p>
  427. Binary Subtraction
  428. </p>
  429. </td>
  430. </tr>
  431. <tr>
  432. <td>
  433. <p>
  434. <code class="computeroutput"><span class="identifier">ca</span> <span class="special">-</span>
  435. <span class="identifier">cr</span></code>
  436. </p>
  437. </td>
  438. <td>
  439. <p>
  440. RealType
  441. </p>
  442. </td>
  443. <td>
  444. <p>
  445. Binary Subtraction
  446. </p>
  447. </td>
  448. </tr>
  449. <tr>
  450. <td>
  451. <p>
  452. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">*</span>
  453. <span class="identifier">cr2</span></code>
  454. </p>
  455. </td>
  456. <td>
  457. <p>
  458. RealType
  459. </p>
  460. </td>
  461. <td>
  462. <p>
  463. Binary Multiplication
  464. </p>
  465. </td>
  466. </tr>
  467. <tr>
  468. <td>
  469. <p>
  470. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">*</span>
  471. <span class="identifier">ca</span></code>
  472. </p>
  473. </td>
  474. <td>
  475. <p>
  476. RealType
  477. </p>
  478. </td>
  479. <td>
  480. <p>
  481. Binary Multiplication
  482. </p>
  483. </td>
  484. </tr>
  485. <tr>
  486. <td>
  487. <p>
  488. <code class="computeroutput"><span class="identifier">ca</span> <span class="special">*</span>
  489. <span class="identifier">cr</span></code>
  490. </p>
  491. </td>
  492. <td>
  493. <p>
  494. RealType
  495. </p>
  496. </td>
  497. <td>
  498. <p>
  499. Binary Multiplication
  500. </p>
  501. </td>
  502. </tr>
  503. <tr>
  504. <td>
  505. <p>
  506. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">/</span>
  507. <span class="identifier">cr2</span></code>
  508. </p>
  509. </td>
  510. <td>
  511. <p>
  512. RealType
  513. </p>
  514. </td>
  515. <td>
  516. <p>
  517. Binary Subtraction
  518. </p>
  519. </td>
  520. </tr>
  521. <tr>
  522. <td>
  523. <p>
  524. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">/</span>
  525. <span class="identifier">ca</span></code>
  526. </p>
  527. </td>
  528. <td>
  529. <p>
  530. RealType
  531. </p>
  532. </td>
  533. <td>
  534. <p>
  535. Binary Subtraction
  536. </p>
  537. </td>
  538. </tr>
  539. <tr>
  540. <td>
  541. <p>
  542. <code class="computeroutput"><span class="identifier">ca</span> <span class="special">/</span>
  543. <span class="identifier">cr</span></code>
  544. </p>
  545. </td>
  546. <td>
  547. <p>
  548. RealType
  549. </p>
  550. </td>
  551. <td>
  552. <p>
  553. Binary Subtraction
  554. </p>
  555. </td>
  556. </tr>
  557. <tr>
  558. <td>
  559. <p>
  560. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">==</span>
  561. <span class="identifier">cr2</span></code>
  562. </p>
  563. </td>
  564. <td>
  565. <p>
  566. bool
  567. </p>
  568. </td>
  569. <td>
  570. <p>
  571. Equality Comparison
  572. </p>
  573. </td>
  574. </tr>
  575. <tr>
  576. <td>
  577. <p>
  578. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">==</span>
  579. <span class="identifier">ca</span></code>
  580. </p>
  581. </td>
  582. <td>
  583. <p>
  584. bool
  585. </p>
  586. </td>
  587. <td>
  588. <p>
  589. Equality Comparison
  590. </p>
  591. </td>
  592. </tr>
  593. <tr>
  594. <td>
  595. <p>
  596. <code class="computeroutput"><span class="identifier">ca</span> <span class="special">==</span>
  597. <span class="identifier">cr</span></code>
  598. </p>
  599. </td>
  600. <td>
  601. <p>
  602. bool
  603. </p>
  604. </td>
  605. <td>
  606. <p>
  607. Equality Comparison
  608. </p>
  609. </td>
  610. </tr>
  611. <tr>
  612. <td>
  613. <p>
  614. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">!=</span>
  615. <span class="identifier">cr2</span></code>
  616. </p>
  617. </td>
  618. <td>
  619. <p>
  620. bool
  621. </p>
  622. </td>
  623. <td>
  624. <p>
  625. Inequality Comparison
  626. </p>
  627. </td>
  628. </tr>
  629. <tr>
  630. <td>
  631. <p>
  632. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">!=</span>
  633. <span class="identifier">ca</span></code>
  634. </p>
  635. </td>
  636. <td>
  637. <p>
  638. bool
  639. </p>
  640. </td>
  641. <td>
  642. <p>
  643. Inequality Comparison
  644. </p>
  645. </td>
  646. </tr>
  647. <tr>
  648. <td>
  649. <p>
  650. <code class="computeroutput"><span class="identifier">ca</span> <span class="special">!=</span>
  651. <span class="identifier">cr</span></code>
  652. </p>
  653. </td>
  654. <td>
  655. <p>
  656. bool
  657. </p>
  658. </td>
  659. <td>
  660. <p>
  661. Inequality Comparison
  662. </p>
  663. </td>
  664. </tr>
  665. <tr>
  666. <td>
  667. <p>
  668. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&lt;=</span>
  669. <span class="identifier">cr2</span></code>
  670. </p>
  671. </td>
  672. <td>
  673. <p>
  674. bool
  675. </p>
  676. </td>
  677. <td>
  678. <p>
  679. Less than equal to.
  680. </p>
  681. </td>
  682. </tr>
  683. <tr>
  684. <td>
  685. <p>
  686. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&lt;=</span>
  687. <span class="identifier">ca</span></code>
  688. </p>
  689. </td>
  690. <td>
  691. <p>
  692. bool
  693. </p>
  694. </td>
  695. <td>
  696. <p>
  697. Less than equal to.
  698. </p>
  699. </td>
  700. </tr>
  701. <tr>
  702. <td>
  703. <p>
  704. <code class="computeroutput"><span class="identifier">ca</span> <span class="special">&lt;=</span>
  705. <span class="identifier">cr</span></code>
  706. </p>
  707. </td>
  708. <td>
  709. <p>
  710. bool
  711. </p>
  712. </td>
  713. <td>
  714. <p>
  715. Less than equal to.
  716. </p>
  717. </td>
  718. </tr>
  719. <tr>
  720. <td>
  721. <p>
  722. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&gt;=</span>
  723. <span class="identifier">cr2</span></code>
  724. </p>
  725. </td>
  726. <td>
  727. <p>
  728. bool
  729. </p>
  730. </td>
  731. <td>
  732. <p>
  733. Greater than equal to.
  734. </p>
  735. </td>
  736. </tr>
  737. <tr>
  738. <td>
  739. <p>
  740. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&gt;=</span>
  741. <span class="identifier">ca</span></code>
  742. </p>
  743. </td>
  744. <td>
  745. <p>
  746. bool
  747. </p>
  748. </td>
  749. <td>
  750. <p>
  751. Greater than equal to.
  752. </p>
  753. </td>
  754. </tr>
  755. <tr>
  756. <td>
  757. <p>
  758. <code class="computeroutput"><span class="identifier">ca</span> <span class="special">&gt;=</span>
  759. <span class="identifier">cr</span></code>
  760. </p>
  761. </td>
  762. <td>
  763. <p>
  764. bool
  765. </p>
  766. </td>
  767. <td>
  768. <p>
  769. Greater than equal to.
  770. </p>
  771. </td>
  772. </tr>
  773. <tr>
  774. <td>
  775. <p>
  776. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&lt;</span>
  777. <span class="identifier">cr2</span></code>
  778. </p>
  779. </td>
  780. <td>
  781. <p>
  782. bool
  783. </p>
  784. </td>
  785. <td>
  786. <p>
  787. Less than comparison.
  788. </p>
  789. </td>
  790. </tr>
  791. <tr>
  792. <td>
  793. <p>
  794. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&lt;</span>
  795. <span class="identifier">ca</span></code>
  796. </p>
  797. </td>
  798. <td>
  799. <p>
  800. bool
  801. </p>
  802. </td>
  803. <td>
  804. <p>
  805. Less than comparison.
  806. </p>
  807. </td>
  808. </tr>
  809. <tr>
  810. <td>
  811. <p>
  812. <code class="computeroutput"><span class="identifier">ca</span> <span class="special">&lt;</span>
  813. <span class="identifier">cr</span></code>
  814. </p>
  815. </td>
  816. <td>
  817. <p>
  818. bool
  819. </p>
  820. </td>
  821. <td>
  822. <p>
  823. Less than comparison.
  824. </p>
  825. </td>
  826. </tr>
  827. <tr>
  828. <td>
  829. <p>
  830. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&gt;</span>
  831. <span class="identifier">cr2</span></code>
  832. </p>
  833. </td>
  834. <td>
  835. <p>
  836. bool
  837. </p>
  838. </td>
  839. <td>
  840. <p>
  841. Greater than comparison.
  842. </p>
  843. </td>
  844. </tr>
  845. <tr>
  846. <td>
  847. <p>
  848. <code class="computeroutput"><span class="identifier">cr</span> <span class="special">&gt;</span>
  849. <span class="identifier">ca</span></code>
  850. </p>
  851. </td>
  852. <td>
  853. <p>
  854. bool
  855. </p>
  856. </td>
  857. <td>
  858. <p>
  859. Greater than comparison.
  860. </p>
  861. </td>
  862. </tr>
  863. <tr>
  864. <td>
  865. <p>
  866. <code class="computeroutput"><span class="identifier">ca</span> <span class="special">&gt;</span>
  867. <span class="identifier">cr</span></code>
  868. </p>
  869. </td>
  870. <td>
  871. <p>
  872. bool
  873. </p>
  874. </td>
  875. <td>
  876. <p>
  877. Greater than comparison.
  878. </p>
  879. </td>
  880. </tr>
  881. <tr>
  882. <td>
  883. <p>
  884. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">digits</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
  885. </p>
  886. </td>
  887. <td>
  888. <p>
  889. int
  890. </p>
  891. </td>
  892. <td>
  893. <p>
  894. The number of digits in the significand of RealType.
  895. </p>
  896. </td>
  897. </tr>
  898. <tr>
  899. <td>
  900. <p>
  901. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">max_value</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
  902. </p>
  903. </td>
  904. <td>
  905. <p>
  906. RealType
  907. </p>
  908. </td>
  909. <td>
  910. <p>
  911. The largest representable number by type RealType.
  912. </p>
  913. </td>
  914. </tr>
  915. <tr>
  916. <td>
  917. <p>
  918. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">min_value</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
  919. </p>
  920. </td>
  921. <td>
  922. <p>
  923. RealType
  924. </p>
  925. </td>
  926. <td>
  927. <p>
  928. The smallest representable number by type RealType.
  929. </p>
  930. </td>
  931. </tr>
  932. <tr>
  933. <td>
  934. <p>
  935. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">log_max_value</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
  936. </p>
  937. </td>
  938. <td>
  939. <p>
  940. RealType
  941. </p>
  942. </td>
  943. <td>
  944. <p>
  945. The natural logarithm of the largest representable number by type
  946. RealType.
  947. </p>
  948. </td>
  949. </tr>
  950. <tr>
  951. <td>
  952. <p>
  953. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">log_min_value</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
  954. </p>
  955. </td>
  956. <td>
  957. <p>
  958. RealType
  959. </p>
  960. </td>
  961. <td>
  962. <p>
  963. The natural logarithm of the smallest representable number by type
  964. RealType.
  965. </p>
  966. </td>
  967. </tr>
  968. <tr>
  969. <td>
  970. <p>
  971. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">epsilon</span><span class="special">&lt;</span><span class="identifier">RealType</span><span class="special">&gt;()</span></code>
  972. </p>
  973. </td>
  974. <td>
  975. <p>
  976. RealType
  977. </p>
  978. </td>
  979. <td>
  980. <p>
  981. The machine epsilon of RealType.
  982. </p>
  983. </td>
  984. </tr>
  985. </tbody>
  986. </table></div>
  987. <p>
  988. Note that:
  989. </p>
  990. <div class="orderedlist"><ol class="orderedlist" type="1">
  991. <li class="listitem">
  992. The functions <code class="computeroutput"><span class="identifier">log_max_value</span></code>
  993. and <code class="computeroutput"><span class="identifier">log_min_value</span></code> can be
  994. synthesised from the others, and so no explicit specialisation is required.
  995. </li>
  996. <li class="listitem">
  997. The function <code class="computeroutput"><span class="identifier">epsilon</span></code> can
  998. be synthesised from the others, so no explicit specialisation is required
  999. provided the precision of RealType does not vary at runtime (see the header
  1000. <a href="../../../../../boost/math/bindings/rr.hpp" target="_top">boost/math/bindings/rr.hpp</a>
  1001. for an example where the precision does vary at runtime).
  1002. </li>
  1003. <li class="listitem">
  1004. The functions <code class="computeroutput"><span class="identifier">digits</span></code>,
  1005. <code class="computeroutput"><span class="identifier">max_value</span></code> and <code class="computeroutput"><span class="identifier">min_value</span></code>, all get synthesised automatically
  1006. from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>. However, if <code class="computeroutput"><span class="identifier">numeric_limits</span></code> is not specialised for
  1007. type RealType, then you will get a compiler error when code tries to use
  1008. these functions, <span class="emphasis"><em>unless</em></span> you explicitly specialise
  1009. them. For example if the precision of RealType varies at runtime, then
  1010. <code class="computeroutput"><span class="identifier">numeric_limits</span></code> support
  1011. may not be appropriate, see <a href="../../../../../boost/math/bindings/rr.hpp" target="_top">boost/math/bindings/rr.hpp</a>
  1012. for examples.
  1013. </li>
  1014. </ol></div>
  1015. <div class="warning"><table border="0" summary="Warning">
  1016. <tr>
  1017. <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../doc/src/images/warning.png"></td>
  1018. <th align="left">Warning</th>
  1019. </tr>
  1020. <tr><td align="left" valign="top">
  1021. <p>
  1022. If <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;&gt;</span></code>
  1023. is <span class="bold"><strong>not specialized</strong></span> for type <span class="emphasis"><em>RealType</em></span>
  1024. then the default float precision of 6 decimal digits will be used by other
  1025. Boost programs including:
  1026. </p>
  1027. <p>
  1028. Boost.Test: giving misleading error messages like
  1029. </p>
  1030. <p>
  1031. <span class="emphasis"><em>"difference between {9.79796} and {9.79796} exceeds 5.42101e-19%".</em></span>
  1032. </p>
  1033. <p>
  1034. Boost.LexicalCast and Boost.Serialization when converting the number to a
  1035. string, causing potentially serious loss of accuracy on output.
  1036. </p>
  1037. <p>
  1038. Although it might seem obvious that RealType should require <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>
  1039. to be specialized, this is not sensible for <code class="computeroutput"><span class="identifier">NTL</span><span class="special">::</span><span class="identifier">RR</span></code> and
  1040. similar classes where the <span class="bold"><strong>number of digits is a runtime
  1041. parameter</strong></span> (whereas for <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
  1042. everything has to be fixed at compile time).
  1043. </p>
  1044. </td></tr>
  1045. </table></div>
  1046. <h5>
  1047. <a name="math_toolkit.real_concepts.h1"></a>
  1048. <span class="phrase"><a name="math_toolkit.real_concepts.standard_library_support_require"></a></span><a class="link" href="real_concepts.html#math_toolkit.real_concepts.standard_library_support_require">Standard
  1049. Library Support Requirements</a>
  1050. </h5>
  1051. <p>
  1052. Many (though not all) of the functions in this library make calls to standard
  1053. library functions, the following table summarises the requirements. Note that
  1054. most of the functions in this library will only call a small subset of the
  1055. functions listed here, so if in doubt whether a user-defined type has enough
  1056. standard library support to be useable the best advise is to try it and see!
  1057. </p>
  1058. <p>
  1059. In the following table <span class="emphasis"><em>r</em></span> is an object of type <code class="computeroutput"><span class="identifier">RealType</span></code>, <span class="emphasis"><em>cr1</em></span> and <span class="emphasis"><em>cr2</em></span>
  1060. are objects of type <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">RealType</span></code>,
  1061. and <span class="emphasis"><em>i</em></span> is an object of type <code class="computeroutput"><span class="keyword">int</span></code>.
  1062. </p>
  1063. <div class="informaltable"><table class="table">
  1064. <colgroup>
  1065. <col>
  1066. <col>
  1067. </colgroup>
  1068. <thead><tr>
  1069. <th>
  1070. <p>
  1071. Expression
  1072. </p>
  1073. </th>
  1074. <th>
  1075. <p>
  1076. Result Type
  1077. </p>
  1078. </th>
  1079. </tr></thead>
  1080. <tbody>
  1081. <tr>
  1082. <td>
  1083. <p>
  1084. <code class="computeroutput"><span class="identifier">fabs</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1085. </p>
  1086. </td>
  1087. <td>
  1088. <p>
  1089. RealType
  1090. </p>
  1091. </td>
  1092. </tr>
  1093. <tr>
  1094. <td>
  1095. <p>
  1096. <code class="computeroutput"><span class="identifier">abs</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1097. </p>
  1098. </td>
  1099. <td>
  1100. <p>
  1101. RealType
  1102. </p>
  1103. </td>
  1104. </tr>
  1105. <tr>
  1106. <td>
  1107. <p>
  1108. <code class="computeroutput"><span class="identifier">ceil</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1109. </p>
  1110. </td>
  1111. <td>
  1112. <p>
  1113. RealType
  1114. </p>
  1115. </td>
  1116. </tr>
  1117. <tr>
  1118. <td>
  1119. <p>
  1120. <code class="computeroutput"><span class="identifier">floor</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1121. </p>
  1122. </td>
  1123. <td>
  1124. <p>
  1125. RealType
  1126. </p>
  1127. </td>
  1128. </tr>
  1129. <tr>
  1130. <td>
  1131. <p>
  1132. <code class="computeroutput"><span class="identifier">exp</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1133. </p>
  1134. </td>
  1135. <td>
  1136. <p>
  1137. RealType
  1138. </p>
  1139. </td>
  1140. </tr>
  1141. <tr>
  1142. <td>
  1143. <p>
  1144. <code class="computeroutput"><span class="identifier">pow</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">,</span>
  1145. <span class="identifier">cr2</span><span class="special">)</span></code>
  1146. </p>
  1147. </td>
  1148. <td>
  1149. <p>
  1150. RealType
  1151. </p>
  1152. </td>
  1153. </tr>
  1154. <tr>
  1155. <td>
  1156. <p>
  1157. <code class="computeroutput"><span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1158. </p>
  1159. </td>
  1160. <td>
  1161. <p>
  1162. RealType
  1163. </p>
  1164. </td>
  1165. </tr>
  1166. <tr>
  1167. <td>
  1168. <p>
  1169. <code class="computeroutput"><span class="identifier">log</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1170. </p>
  1171. </td>
  1172. <td>
  1173. <p>
  1174. RealType
  1175. </p>
  1176. </td>
  1177. </tr>
  1178. <tr>
  1179. <td>
  1180. <p>
  1181. <code class="computeroutput"><span class="identifier">frexp</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">,</span>
  1182. <span class="special">&amp;</span><span class="identifier">i</span><span class="special">)</span></code>
  1183. </p>
  1184. </td>
  1185. <td>
  1186. <p>
  1187. RealType
  1188. </p>
  1189. </td>
  1190. </tr>
  1191. <tr>
  1192. <td>
  1193. <p>
  1194. <code class="computeroutput"><span class="identifier">ldexp</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">,</span>
  1195. <span class="identifier">i</span><span class="special">)</span></code>
  1196. </p>
  1197. </td>
  1198. <td>
  1199. <p>
  1200. RealType
  1201. </p>
  1202. </td>
  1203. </tr>
  1204. <tr>
  1205. <td>
  1206. <p>
  1207. <code class="computeroutput"><span class="identifier">cos</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1208. </p>
  1209. </td>
  1210. <td>
  1211. <p>
  1212. RealType
  1213. </p>
  1214. </td>
  1215. </tr>
  1216. <tr>
  1217. <td>
  1218. <p>
  1219. <code class="computeroutput"><span class="identifier">sin</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1220. </p>
  1221. </td>
  1222. <td>
  1223. <p>
  1224. RealType
  1225. </p>
  1226. </td>
  1227. </tr>
  1228. <tr>
  1229. <td>
  1230. <p>
  1231. <code class="computeroutput"><span class="identifier">asin</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1232. </p>
  1233. </td>
  1234. <td>
  1235. <p>
  1236. RealType
  1237. </p>
  1238. </td>
  1239. </tr>
  1240. <tr>
  1241. <td>
  1242. <p>
  1243. <code class="computeroutput"><span class="identifier">tan</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1244. </p>
  1245. </td>
  1246. <td>
  1247. <p>
  1248. RealType
  1249. </p>
  1250. </td>
  1251. </tr>
  1252. <tr>
  1253. <td>
  1254. <p>
  1255. <code class="computeroutput"><span class="identifier">atan</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1256. </p>
  1257. </td>
  1258. <td>
  1259. <p>
  1260. RealType
  1261. </p>
  1262. </td>
  1263. </tr>
  1264. <tr>
  1265. <td>
  1266. <p>
  1267. <code class="computeroutput"><span class="identifier">fmod</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1268. </p>
  1269. </td>
  1270. <td>
  1271. <p>
  1272. RealType
  1273. </p>
  1274. </td>
  1275. </tr>
  1276. <tr>
  1277. <td>
  1278. <p>
  1279. <code class="computeroutput"><span class="identifier">round</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1280. </p>
  1281. </td>
  1282. <td>
  1283. <p>
  1284. RealType
  1285. </p>
  1286. </td>
  1287. </tr>
  1288. <tr>
  1289. <td>
  1290. <p>
  1291. <code class="computeroutput"><span class="identifier">iround</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1292. </p>
  1293. </td>
  1294. <td>
  1295. <p>
  1296. int
  1297. </p>
  1298. </td>
  1299. </tr>
  1300. <tr>
  1301. <td>
  1302. <p>
  1303. <code class="computeroutput"><span class="identifier">trunc</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1304. </p>
  1305. </td>
  1306. <td>
  1307. <p>
  1308. RealType
  1309. </p>
  1310. </td>
  1311. </tr>
  1312. <tr>
  1313. <td>
  1314. <p>
  1315. <code class="computeroutput"><span class="identifier">itrunc</span><span class="special">(</span><span class="identifier">cr1</span><span class="special">)</span></code>
  1316. </p>
  1317. </td>
  1318. <td>
  1319. <p>
  1320. int
  1321. </p>
  1322. </td>
  1323. </tr>
  1324. </tbody>
  1325. </table></div>
  1326. <p>
  1327. Note that the table above lists only those standard library functions known
  1328. to be used (or likely to be used in the near future) by this library. The following
  1329. functions: <code class="computeroutput"><span class="identifier">acos</span></code>, <code class="computeroutput"><span class="identifier">atan2</span></code>, <code class="computeroutput"><span class="identifier">fmod</span></code>,
  1330. <code class="computeroutput"><span class="identifier">cosh</span></code>, <code class="computeroutput"><span class="identifier">sinh</span></code>,
  1331. <code class="computeroutput"><span class="identifier">tanh</span></code>, <code class="computeroutput"><span class="identifier">log10</span></code>,
  1332. <code class="computeroutput"><span class="identifier">lround</span></code>, <code class="computeroutput"><span class="identifier">llround</span></code>,
  1333. <code class="computeroutput"><span class="identifier">ltrunc</span></code>, <code class="computeroutput"><span class="identifier">lltrunc</span></code>
  1334. and <code class="computeroutput"><span class="identifier">modf</span></code> are not currently
  1335. used, but may be if further special functions are added.
  1336. </p>
  1337. <p>
  1338. Note that the <code class="computeroutput"><span class="identifier">round</span></code>, <code class="computeroutput"><span class="identifier">trunc</span></code> and <code class="computeroutput"><span class="identifier">modf</span></code>
  1339. functions are not part of the current C++ standard: they are part of the additions
  1340. added to C99 which will likely be in the next C++ standard. There are Boost
  1341. versions of these provided as a backup, and the functions are always called
  1342. unqualified so that argument-dependent-lookup can take place.
  1343. </p>
  1344. <p>
  1345. In addition, for efficient and accurate results, a <a class="link" href="lanczos.html" title="The Lanczos Approximation">Lanczos
  1346. approximation</a> is highly desirable. You may be able to adapt an existing
  1347. approximation from <a href="../../../../../boost/math/special_functions/lanczos.hpp" target="_top">boost/math/special_functions/lanczos.hpp</a>
  1348. or <a href="../../../../../boost/math/bindings/detail/big_lanczos.hpp" target="_top">boost/math/bindings/detail/big_lanczos.hpp</a>:
  1349. in the former case you will need change <code class="computeroutput"><span class="keyword">static_cast</span></code>'s
  1350. to <code class="computeroutput"><span class="identifier">lexical_cast</span></code>'s, and the
  1351. constants to <span class="emphasis"><em>strings</em></span> (in order to ensure the coefficients
  1352. aren't truncated to <code class="computeroutput"><span class="keyword">long</span> <span class="identifier">doubl</span></code>e)
  1353. and then specialise <code class="computeroutput"><span class="identifier">lanczos_traits</span></code>
  1354. for type T. Otherwise you may have to hack <a href="../../../tools/lanczos_generator.cpp" target="_top">libs/math/tools/lanczos_generator.cpp</a>
  1355. to find a suitable approximation for your RealType. The code will still compile
  1356. if you don't do this, but both accuracy and efficiency will be somewhat compromised
  1357. in any function that makes use of the gamma/beta/erf family of functions.
  1358. </p>
  1359. </div>
  1360. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  1361. <td align="left"></td>
  1362. <td align="right"><div class="copyright-footer">Copyright &#169; 2006-2019 Nikhar
  1363. Agrawal, Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos,
  1364. Hubert Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Matthew Pulver, Johan
  1365. R&#229;de, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg,
  1366. Daryle Walker and Xiaogang Zhang<p>
  1367. Distributed under the Boost Software License, Version 1.0. (See accompanying
  1368. 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>)
  1369. </p>
  1370. </div></td>
  1371. </tr></table>
  1372. <hr>
  1373. <div class="spirit-nav">
  1374. <a accesskey="p" href="high_precision/using_test.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../using_udt.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="dist_concept.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
  1375. </div>
  1376. </body>
  1377. </html>