Рассмотрим следующие MCVE:
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
int main()
{
boost::multiprecision::cpp_int x = 10;
x *= 10000000000000000000000000000000000000000000000000000000000000;
std::cout<<x<<std::endl;
return 0;
}
Это дает неправильный результат из-за очевидного переполнения от этого int
. Как я могу сделать это правильно, если я не хочу использовать строки? Есть ли что-то вроде «оператора сдвига цифр» или функции мощности, которая может сделать это дешево (или дешевле)?
Почему? Поскольку у меня есть библиотека с фиксированной точностью, которую я написал, и масштабирование внутреннего целого требует, чтобы такие операции были на 100% безопасными.
Найдите пример здесь .