«Попробуем написать очень простую программу (а на самом деле функцию - какая разница?), которая вычисляет среднее значение двух аргументов:
int avg(int a, int b) { return (a + b) / 2; } Правильно?
Вы конечно узнали язык Си, и скорее всего не заметили в чем тут подвох. Не отчаивайтесь: согласно одному исследованию, подобные вещи не замечают 95% программистов. Дело в том, что при сложении (a + b) может произойти переполнение, когда как результат - ведь он же среднее двух аргументов - никогда не должен переполняться. Значит надо переписать функцию так, чтобы она не была подвержена переполнениям:
int avg(int a, int b) { return a + (b - a) / 2; } Правильно?»
Из статьи Клиника плохого кода. http://bugtraq.ru/library/programming/badcode.html
Собственно вопрос таков, разве выражение (a + b) /2 === a + (b -a) / 2 по результату ?
P.S Если решите что мне нужна самому нужна операция операция на мозгу, так и быть. Но хотелось бы знать почему =)