小编Aur*_*ary的帖子

如何在 Boost::multiprecision 中使用 sqrt 和 ceil?

您知道如何使用 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)

那么就出现了“通用互变”的错误!?!

我认为应该有一种更优雅的方式来实现如此简单的代码行,不是吗?如果您对此有一些想法,请告诉我。

问候。

c++ boost sqrt ceil multiprecision

4
推荐指数
1
解决办法
2668
查看次数

标签 统计

boost ×1

c++ ×1

ceil ×1

multiprecision ×1

sqrt ×1