2

除法boost::multiprecision::cpp_dec_float有某种舍入误差,如下:

#include <iostream>
#include <boost/multiprecision/cpp_dec_float.hpp>

using my_t = boost::multiprecision::number<boost::multiprecision::cpp_dec_float<20, std::int32_t>>;

int main()
{
    my_t a = 150;
    my_t b = 300;
    my_t c = a / b;
    std::cout << c.str() << std::endl;
    std::cout << ((c==my_t(0.5))?"==":"!=") << std::endl;
    return 0;
}

输出:

0.5000000000000000000000000000000000000000136852
!=

这是预期的吗?

考虑到真的需要十进制值,还有其他更合适的类型吗?

我是否应该截断或舍入到神奇的十进制数字?

4

0 回答 0