您知道如何使用 Boost::multiprecison 执行这行简单的代码而不会出错吗?
boost::multiprecision::cpp_int v, uMax, candidate;
//...
v += 6 * ceil((sqrt(uMax * uMax - candidate) - v) / 6);
Run Code Online (Sandbox Code Playgroud)
使用 MSVC 时,"sqrt" 会出现错误,可以通过以下方式修复它:
v += 6 * ceil((sqrt(static_cast<boost::multiprecision::cpp_int>(uMax * uMax - candidate)) - v) / 6);
Run Code Online (Sandbox Code Playgroud)
然后“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));
Run Code Online (Sandbox Code Playgroud)
那么就出现了“通用互变”的错误!?!
我认为应该有一种更优雅的方式来实现如此简单的代码行,不是吗?如果您对此有一些想法,请告诉我。
问候。