151 | | This exciting and challenging task requires a high level of adeptness with C++ coding, mathematics, and algorithms. It combines high-performance with absolute error intolerance. As such, this project will hone the skills of the mathematical and algorithmic programmer and serve well as a research topic for students whose studies include algorithms. |
| 151 | This is definitely an advanced project in C++ and algorithmic. Yet at the same time, it is an exciting and challenging task. It will require a high level of adeptness with C++ coding, mathematics, and algorithms. It combines high-performance with absolute error intolerance. As such, this project will hone the skills of the mathematical and algorithmic programmer and serve well as a research topic for students whose studies include algorithms. |
| 152 | |
| 153 | Boost.Multiprecision already has a boost-licensed decimal (radix-10) floating-point back-end. This project will provide a binary (radix-2) floating point back-end that is expected to improve efficiency and provide a more natural conversion to and from C++ built-in floating-point types having radix-2 such as float, double, and long double. |
| 154 | |
| 155 | We will now discuss various project details and sketch the general progression of the steps that will be undertaken. |
| 156 | |
| 157 | The main steps of algorithmic design include |
| 158 | * First of all, we will closely monitor the progress of this project and decide what precision ranges we would like to support. |
| 159 | * The easiest precision level involves floating-point numbers with less than about 1,000 decimal digits of precision. |
| 160 | * Further levels climb to thousands or even millions of digits, but these require algorithms of increasing complexity. |
| 161 | * One of the first steps is to providing I/O handling for character-based strings and C++ <iostream> support. |
| 162 | * The next important step involves implementing the basic algebraic operations (+, +, *, /) using a variety of techniques. |
| 163 | * Multiplication is the performance bottleneck in multiprecision, and depending on the range goals, we may optionally include high-performance with Karatsuba multiplication and potentially ultra high performance and high digit counts with FFT-based multiplication. |
| 164 | * Optionally we will be providing support for the elementary transcendental functions listed in <cmath>, as is now done for the existing back-ends. |
| 165 | * Finally, we need to ensure that the back-end seamlessly interoperates with Boost.Math. |
| 166 | * Testing is essential in order to verify the correctness of the implementation. We will, therefore, be writing a variety of tests to validate the algebra as well as the functions. |