Есть код, по которому можно сделать вывод, что boost_decimal не работает, как надо:
#include <iostream>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <decimal/decimal>
using namespace std;
using decimal32 = decimal::decimal32;
using boost_decimal = boost::multiprecision::cpp_dec_float_50;
std::ostream& operator<<(std::ostream& out, const decimal32& d)
{
out << decimal::decimal32_to_double(d);
return out;
}
int main()
{
decimal32 a(0.1);
auto a2 = a+a+a+a+a+a+a+a+a+a;
cout << a2 << "\n";
cout << (a2==1) << "\n";
boost_decimal b(0.1);
auto b2 = b+b+b+b+b+b+b+b+b+b;
cout << b2 << "\n";
cout << (b2==1) << "\n";
return 0;
}
Результат:
1
1
1
0
Это баг или фича?