我正在测试构造的字符串 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/

10-11 18:27