Re[8]: Откуда эта лютая любовь к знаковым целым?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 06.05.20 14:07
Оценка: 1 (1) +1
Здравствуйте, Евгений Музыченко, Вы писали:

N>>Разумеется, это не натуральное, а целое положительное!

ЕМ>Любое целое положительное число является натуральным.

Да, но не в этом случае: тут натуральность — это частный случай. А ожидается именно целое оложительное.

N>>Потому что запись -r не существует в моноиде натуральных чисел.

ЕМ>А ей нужно в нем существовать? Зачем?

Потому что код не будет работать без явного каста к целому. Множество натуральных чисел не замкнуто относительно операции вычитания, в нём нет противоположного элемента, поэтому выбирают более подходящее множество. В моём коде беззнаковые только индексы при итерации по контейнерам (из-за STL) и всякие флаги. Ну и внешнее API, если надо. И то не все индексы из-за обратного прохода по циклам и openmp.

ЕМ>Не понял тонкости. Проверять нужно и так и так. А насколько часто Вам требуется, имея r, получить -r, что держать r в беззнаковом типе однозначно выгоднее?


Проверять для знакового надо 1 раз при вводе, а дальше просто пользоваться. Если же будет беззнаковое, то его ещё и кастовать остоянно придётся. По факту ВСЕ оконные координаты в пикслях знаковые, потому что они могут быть отрицательными. Все размеры изображений знаковые, потому что они тоже могут стать отрицательными в результате преобразований — корректных преобразований. И намного проще потом диагностировать почему значение ширины стало -5, а не, скажем, 4294967291. Потому что при -5 оно просто исчезнет или окажется с противоположной стороны. Далее скорости, которые тоже могут измеряться в икселях тоже знаковые. Сдвинули объект, у него окзались отрицательные координаты — обработали. Были бы они беззнаковыми, получилась бы либо лапша проверок в коде, либо завёрнутая внутри методов. И так повсюду.
Оказалось, что беззнаковые нужны за редким исключением, чаще всего для редкого внешнего API, где просто нет вычитания.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.