Post Thumbnail

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

Автор разбирает существующие решения - наивное двойное деление по модулю, алгоритм Хиннанта и современный "золотой стандарт" Кассио Нери.

А потом начинается самое интересное, автор представляет собственные сверхбыстрые способы, основанные на том, что число 7 является числом Мерсенна, что позволяет заменить деление по модулю одним умножением, сложением и сдвигом. Лучший вариант укладывается всего в три x86-инструкции и работает на всем знаковом 32-битном диапазоне, а многие версии имеют задержку в одно умножение плюс два цикла.

Вот это я понимаю, вот это знатное байтоебство

Похожее