我可能来晚了,但128位小数能行吗?
这些已被C++接受,并且至少自gcc-4.5以来gcc已经支持它们(现在我们正在使用4.9):
#include <iostream>
#include <decimal/decimal>
using namespace std;
int main()
{
{
std::decimal::decimal32 dn(.3), dn2(.099), dn3(1000), dn4(201);
dn-=dn2;
dn*=dn3;
cout << "decimal32 = " << (dn==dn4) << " : " << decimal32_to_double(dn) << endl;
}
{
std::decimal::decimal64 dn(.3), dn2(.099), dn3(1000), dn4(201);
dn-=dn2;
dn*=dn3;
cout << "decimal64 = " << (dn==dn4) << " : " << decimal64_to_double(dn) << endl;
}
{
std::decimal::decimal128 dn(.3), dn2(.099), dn3(1000), dn4(201);
dn-=dn2;
dn*=dn3;
cout << "decimal128 = " << (dn==dn4) << " : " << decimal128_to_double(dn) << endl;
}
return 0;
}
注意,decimal32与float大小相等,decimal64与大多数double大小相等。因此,decimal128非常大。来自
维基百科:Decimal128支持34个十进制数字的有效数字和指数范围为-6143到+6144,即±0.000000000000000000000000000000000×10−6143至±9.999999999999999999999999999999999×106144。(同样,±0000000000000000000000000000000000×10−6176至±9999999999999999999999999999999999×106111。)
mpfr库是任意精度二进制浮点数 - 不是任意精度十进制。这有所不同。