Ремарка по поводу этого кода.
void division(){
int divi = static_cast <float> (a) / b;
if(b != 0){
cout << divi;
}
}
В расчетах с floating point результат деления 0.0/0 вполне себе определен. Это неопределенность (NaN) и она вполне себе легальна в домене вещественных чисел. Или бесконечность разных знаков (Inf) если только знаменатель равен нулю. По неясным причинам автор отвергает этот результат.
Более того в ответе будет напечатано
cout<<"Деление:";
и тишина. Неясно отработал метод или нет. Это дефект приложения.
Как бороть такую проблему. В целых числах - никак. Нет легального способа. Я обычно делаю Optional
std::optional<int> safe_div(int x, int y) {
.....
}
Опционал - это коробочка в которой либо лежит число либо не лежит. Вызывающая сторона соотв
обязана исполнить протокол вскрытия этой коробочки. Проверить что она непустая.
Или можно попробовать монаду Either где можно указать причину ошибки.
Не знаю есть ли это в С++ но должно быть. Во всех нормальных языках должно быть.
Float/Double - это коварные типы данных. Они доставляют немало хлопот для bigdata. И с ними надо быть
аккуратными. Главное правило - кастинг из floating point в целые числа в общем случае не работает. Нужно
думать над отработой исключений всегда. Тоже самое касается диапазонов. Они коварны. И можно терять
занчимые разраяды на конверсиях. Ответственность за эти действия ВСЕГДА лежит на программисте.