Одним из решений было бы создание класса вокруг 64-битного целого, который отменял бы арифметические операторы для проверки перед выполнением операции.
Я не могу вспомнить синтаксис operatorX на макушке головы (я давно переключился с C ++ на Java), но пример будет:
int64 myint64::add (int64 a, int64 b) {
if (MAX_INT64 - a > b) {
// error condition here.
}
return a + b;
}
int64 myint64::mul (int64 a, int64 b) {
if (MAX_INT64 / a > b) {
// error condition here.
}
return a * b;
}
Аналогично для любой другой арифметической операции, хотя это может оказаться очень сложным для неосновных функций, таких как полномочия, факториалы и тому подобное.
Однако, если вы строите их из базовых арифметических блоков, они будут работать.