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