Здравствуйте, Евгений Музыченко, Вы писали:
N>>Почему для тебя беззнаковость номера дня важнее остальных факторов?
ЕМ>Каких "всех"? Здесь пока озвучивались только монотонность при переходе через нуль, спецзначения вроде -1, и экономия на преобразованиях.
Ну вот это оно и есть. Вполне достаточно, чтобы использовать равномерное расширение, где доступно.
EM> Циклы с декрементом до нуля включительно я использую крайне редко,
EM> для спецзначений использую UINT_MAX и соседние,
Ну а почему собственно такое загромождение кода и понятий (надо ещё постоянно помнить, что это за UINT_MAX) вместо -1, -2, ... ? Большинству тут отрицательные таки проще (хотя ещё лучше, конечно, когда они именованные константы).
EM> и добавить несколько преобразований, даже в виде static_cast вместо int (), меня не ломает.
Ну а многим не понравится загромождение текста.
N>>И это вполне возможно. Юлианский день, в плавучке — достаточно точный метод задания времени. Но тут начинаются проблемы округления, это уже неудобно. Вот unixtime в микросекундах со знаком — достаточно дёшево и защищено от подобных проблем.
ЕМ>Знак-то там зачем?
Для разностей.
EM> Я вот очень часто пользуюсь виндовой GetTickCount, и ни разу не приходилось преобразовывать результат к знаковому типу. Запомнил время при старте цикла или на последней итерации, на очередной итерации вычел его из нового значения, получил истекший интервал. "Заворот" при переполнении обрабатывается естественным образом, автоматически. Что я все эти годы делал не так?
Тики по GetTickCount специально рассчитаны на такой режим. Но у тебя это работает потому, что в C/C++ unsigned уже гарантированно сделано арифметикой по модулю.
В Ada это отдельный тип чисел: "type counter32 = modulo 2**32" и т.п. (модуль не обязан быть степенью двойки). Вот там, да, штатно такая арифметика (без защиты на заворот).
А знаковые разности времени важны, например, при сборе статистики по работе цикла событий (первое, что вспомнилось навскидку). Так бы пришлось знак выносить отдельно.
Или где-то у меня по аналогичным принципам регулируется запуск очереди заданий в зависимости от нагрузки, там тоже сплошные знаковые в формулах.