Вы знаете, как сделать эту простую строку кода без ошибок, используя 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));
Тогда возникает ошибка "общего взаимопреобразования"!?!
Я думаю, что должен быть более элегантный способ реализовать такую простую строку кода, не так ли? Дайте мне знать, если у вас есть идеи по этому поводу, пожалуйста.
С уважением.