Как использовать sqrt и ceil с Boost :: multiprecision?

Знаете ли вы, как сделать эту простую строку кода без ошибок, используя 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));

Тогда возникает ошибка «общего взаимопревращения»!?!

Я думаю, что должен быть более элегантный способ реализовать столь простую строку кода, не так ли? Дайте мне знать, если у вас есть идеи по этому поводу, пожалуйста.

С уважением.

Ответы на вопрос(2)

Ваш ответ на вопрос