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));
すると「ジェネリック相互変換」のエラーが!?!
このように単純なコード行を実現するには、もっと洗練された方法があるはずだと思いませんか? それについて何かアイデアがあれば教えてください。
よろしく。