我正在测试构造的字符串 gmp_float
。
此代码
#include <boost/multiprecision/number.hpp>
#include <boost/multiprecision/gmp.hpp>
#include <iostream>
using namespace boost::multiprecision;
typedef number<gmp_float<15>> mp_type;
int main()
{
mp_type total("1.01");
cout << total.str(0) << endl;
mp_type first_addition(".01");
cout << first_addition.str(0) << endl;
total += first_addition;
cout << total.str(0) << endl;
}
版画
1.01
0.01
1.01999999999999999998
为什么?我进行了更多测试,在这种特殊情况下,只要一个数字的幅度大于0和
从上面的链接
还有其他区域会失去准确性吗?
最佳答案
Boost Multiprecision也具有十进制浮点数:
看到 Live On Coliru 打印:
clang++ -std=c++11 -Os -Wall -pedantic main.cpp && ./a.out
1.01
0.01
1.02
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <iostream>
using namespace boost::multiprecision;
using std::cout;
using std::endl;
typedef cpp_dec_float_50 mp_type;
int main()
{
mp_type total("1.01");
cout << total.str(0) << endl;
mp_type first_addition(".01");
cout << first_addition.str(0) << endl;
total += first_addition;
cout << total.str(0) << endl;
}
关于c++ - 计算幅度<1和幅度> 1时的精度损失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23965276/