Re[2]: Беззнаковая арифметика
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 14.10.06 20:35
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>Потом кто-то решил заменить int на unsigned ("someone decided that an unsigned was more appropriate for a value in the range [0, 100]"):

ПС>

ПС>

ПС>    /**
ПС>     * Typedef used to represent signal quality as a percentage.
ПС>     * 100 represents perfect signal, 0 no signal.
ПС>     */
ПС>    typedef unsigned Signal;
ПС>

ПС>Ну и получили ошибку: "So, 10u — 20 is a very big unsigned number." Автор (Thomas Guest) делает из этого четрые вывода ("lessons learned"), но не делает главного: избегайте беззнаковой арифметики.

Осталось только доказать, что на момент написания кода с арифметикой тип Signal уже был беззнаковым. Скорее всего, что на тот момент тип Signal был знаковым. А тот, кто изменял тип Singal, скорее всего, даже не знал, какие арифметические операции над ним производятся. Обычная ситуация.

Так что вывод "избегайте беззнаковой арифметики" в данном случае вполне можно довести до логического завершения: избегайте программирования. Вообще. Ибо крайне подверженное ошибкам занятие.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.