fp64lib is a library for implementing 64-bit floating point arithmetic on the AVR MegaAVR architecure microprocessors, like the popular Arduino series. Data format is fully compatible with IEEE 754 binary64 standard, providing about 15-17 digits of accuracy.
The library comes with a math.h compatible head file named “fp64-math.h”. All fp64lib routines start with “fp64_”, e.g. fp64_sin or fp64_add. Library is fully compatible to usual “math.h” routines and include functions for basic arithmetic, checking and comparing, trigonometry, conversion, logarithms and hyperbelic math. Read more…
With V1.2.20, fp64lib already implements 80 functions and it was time to give the users a little bit more structure on what is available. Therefore, the library references was made consistent in style, a table of contents for the more complex pages were introduced and a new page lists the functions by functional groups (like basic math, trigonometric functions, …). Hope this helps especially new users.
The following functions were added to improve coverage required for full math.h compatibility:
fp64_ilogb, fp64_logb, fp64_exp2, fp64_asinh, fp64_acosh, fp64_atanh, fp64_scalbln, fp64_scalbn
See the library reference for details on these functions.
Some bugs, especially in fp64_to_string and supporting functions were fixed to support programs >64kB, e.g. on the ATMEGA 2560.
fp64lib now supports programs that use more than 64kB of flash memory, e.g. on the ATMEGA 2560.
For some arguments, fp64_atan2 did not calculate correct results. This is fixed now.
This release contains a complete rewrite of fp64_modf, both to fix a code and to have an easier way to get both the fraction part and the integer part of a number. Additionaly, the new code is now fully compatible with C/C++ for +INF/-INF.
A bug in fp64_tostring was corrected, where the function incorrectly returned the previously converted string instead of converting the current argument.
The fp64_pow()-function implements xy. The implementation now supports x being a negative number and y being a positive integer, e.g. (-2)5 will now correctly return -32 instead of NaN.
The upcoming release of gcc 10 has 64-bit long double as an configurable option. In order to prepare fp64lib for that, a new macro was introduced GCC_ENTRY to provide compatible naming with gcc 10. Furthermore, the following functions were added for improved compatibility: fp64_cotan(x), fp64_exp10(x), fp64_pow10(x) and fp64_log2.
For further instruction on how to use the long double support, see this page.
Except for the new functions, the implicit long double support is currently not availabe inside the Arduino IDE, as gcc 10 is still in the testing/ experimental phase and not yet offically released.