Здравствуйте, d Bratik, Вы писали:
N>>для любителей signed int'ов:
N>>положим захотелось нам искать среднее двух чисел и написали мы функцию:
N>>int kaka (int a, int b){return (a+b)/2;}
N>>и всё вроде тип-топ, но вот тут сунули нам два числа (вполне корректных):
N>>int a = 2113929216;
N>>int b = 2113929210;
N>>и что?
а какое решение-то простое есть? ассемблер в три команды не предлогать, всё на с++
N>>p.s. я решение знаю, но не сказал бы что оно простое
DB>Решение состоит в том, что система должна генерировать исключение (exception) при переполнении. Отсутствие этой возможности я забыл добавить в качестве 7-го пункта в списке ошибок проектирования языка.
Функции, логика которых не предусматривает ошибочных ситуаций, не должны кидать исключений. А функция вычисления среднего арифметического относится как раз к таким. Т.е. предложенное тобой решение с генерацией исключения неверно.
Любая сложная технология неотличима от волшебства. (Артур Кларк)