Sto eseguendo una simulazione di esperimenti fisici, quindi ho bisogno di una precisione in virgola mobile molto elevata (più di 16 cifre). Uso Boost.Multiprecision, tuttavia non riesco a ottenere una precisione superiore a 16 cifre, indipendentemente da ciò che ho provato. Corro la simulazione con C++ e compilatore Eclipse, ad esempio:virgola mobile di precisione più elevata utilizzando boost lib (superiore a 16 cifre)
#include <boost/math/constants/constants.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <iostream>
#include <limits>
using boost::multiprecision::cpp_dec_float_50;
void main()
{
cpp_dec_float_50 my_num= cpp_dec_float_50(0.123456789123456789123456789);
std::cout.precision(std::numeric_limits<cpp_dec_float_50>::digits10);
std::cout << my_num << std::endl;
}
L'output è:
0.12345678912345678379658409085095627233386039733887
^
ma dovrebbe essere:
0.123456789123456789123456789
Come si può vedere, dopo il 16 cifre non è corretto. Perché?