# Technical Notes

This page summarizes some important details of how SmartiCalc works. It is not necessary to understand all of the content of this page in order to use SmartiCalc effectively, this page is intended for professionals wishing to evaluate whether SmartiCalc can fulfil their needs.

SmartiCalc is entirely written in Kotlin and C++. The C++ backend uses a number of different types (“classes”) from Boost Math and Boost Multiprecision; these libraries are regarded as stable and mature, and hardware floating-point modes are also available. Below is the full list of operating modes, together with their numerical types:

• Floating Point uses hardware double-precision format (C++ type `double`) for maximum speed and reliability, with display accuracy of up to fifteen significant figures.
• Floating Multiprecision uses the type `cpp_bin_float_100` from Boost C++ Multiprecision, with all calculations accurate to one hundred significant figures, and display accuracy up to the same.
• Complex Floating uses the C++ Standard Library’s `complex<double>` type, with real and imaginary components able to be input and displayed in rectangular or polar form with up to fifteen significant figures of accuracy.
• Complex Multiprecision uses the type `cpp_complex_100` from Boost C++ Multiprecision, with all calculations accurate to one hundred significant figures, and display accuracy up to the same, and with input and display formats the same as for Complex Floating
• Rational Multiprecision uses the type `cpp_rational` from Boost C++ Multiprecision, with entry of rational (fractional) numbers of arbitrary accuracy numerator and denominator to be input, and with results displayed as an improper fraction with no loss of accuracy.
• Integer Multiprecision uses the type `cpp_int` from Boost C++ Multiprecision, with entry of integers of arbitrary accuracy possible, and while results are truncated (rounded down) for division, calculation of the remainder from any division is possible.
• Integer Base N uses hardware 64-bit integer arithmetic, with entry of integral numbers in binary, octal, decimal and hexadecimal. Arithmetic and bitwise operations are available, and display in any of these bases at an accuracy of up to 64 bits.

SmartiCalc has a large number of built-in constants, which can be inserted at any point where a numerical value is valid. The constant values available fall into two categories:

• Mathematical Constants accurate to 100 significant figures in the Multiprecision modes, from Boost Math1.
• Physical Constants accurate to best observable limits, from Wikipedia2.

All of the constants are real numbers and are only available to to floating-point and complex modes.

SmartiCalc has a large number of built-in functions, almost all of which are available to the two floating-point modes, and some of which (primarily trigonometric) are available to the two complex modes.

The Mathematical functions available are provided by:

• C++ Library Functions for double-precision real and complex, from the C++ `<cmath>` header file trigonometric3 plus special4 functions.
• Special Functions for multiprecision real and complex, from Boost Math5.