我试图使用升压::多倍库浮动(或在这种情况下,固定)浮点运算。 但是,我有麻烦通过以下方式检测潜在溢出:
typedef boost::multiprecision::number<
boost::multiprecision::cpp_dec_float<50>
> flp_type;
typedef boost::multiprecision::number<
boost::multiprecision::cpp_dec_float<100>
> safe_flp_type;
flp_type _1 = std::numeric_limits<flp_type>::max();
flp_type _2("1");
flp_type _3 = std::numeric_limits<flp_type>::max();
flp_type dtNew;
// Here is the check
safe_flp_type _res = safe_flp_type(_1) + _2;
// **This condition is true for addition of _1 and _3,**
// but fails for _1 + _2
if( (_res > std::numeric_limits<flp_type>::max()) // overflow
||(_res < std::numeric_limits<flp_type>::min())) // underflow
{
BOOST_THROW_EXCEPTION(OverUnderflow() << SpecificErrInfo(L"Attempted floating point over/underflow"));
}
dtNew = _1 + _2;
甚至不应该加1,MAX()的类型触发异常抛出? 我还检查的基础类型溢出后,它不是cpp_dec_float_inf,仍然cpp_dec_float_finite。 另外,dtNew的值等于到std :: numeric_limits :: MAX()
我是这里下一个完整的概念误解? 如果是这样,这将是阻止一个boost ::多倍:: cpp_dec_float <50>溢出的正确方法是什么?