你知道如何使用 Boost::multiprecison 来完成这行简单的代码而不会出错吗?
boost::multiprecision::cpp_int v, uMax, candidate;
//...
v += 6 * ceil((sqrt(uMax * uMax - candidate) - v) / 6);
使用 MSVC 时出现“sqrt”错误,可以通过以下方式修复它:
v += 6 * ceil((sqrt(static_cast<boost::multiprecision::cpp_int>(uMax * uMax - candidate)) - v) / 6);
然后“ceil”出现错误,可以使用以下方法修复它:
namespace bmp = boost::multiprecision;
typedef bmp::number<bmp::cpp_dec_float<0>> float_bmp;
v += 6 * ceil(static_cast<float_bmp>((sqrt(static_cast<bmp::cpp_int>(uMax * uMax - candidate)) - v) / 6));
然后出现“泛型相互转换”的错误!?!
我认为应该有更优雅的方式来实现这么简单的一行代码,不是吗?如果您对此有一些想法,请告诉我。
问候。