Como usar o sqrt e o teto com o Boost :: multiprecision?

Você sabe como fazer essa linha de código simples sem erros usando o Boost :: multiprecison?

boost::multiprecision::cpp_int v, uMax, candidate;
//...
v += 6 * ceil((sqrt(uMax * uMax - candidate) - v) / 6);

Usando o MSVC, há um erro para "sqrt" e é possível corrigi-lo com:

v += 6 * ceil((sqrt(static_cast<boost::multiprecision::cpp_int>(uMax * uMax - candidate)) - v) / 6);

Há um erro para "ceil" e é possível corrigi-lo com:

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));

Há um erro de "interconversão genérica"!?!

Eu acho que deveria haver uma maneira mais elegante de realizar uma linha de código tão simples, não é? Deixe-me saber se você tem algumas idéias sobre isso, por favor.

Saudações.

questionAnswers(2)

yourAnswerToTheQuestion