Осторожно, стотья содержит пропаганду вайбкодинга!
Вместо умных россуждений типа "найдём обратный элемент в кольце вычетов по модулю" там на каждом шагу "ну я короче запихнул формулу в солвер и мне выдало значения".
Но формула красивая, да, солвер молодец, всё правильно пощиталый. :)
Кстати, нащот fast - лукавство. Наивная реализация, которая сначала проверяет делимость на 4, в 3/4 случаев быстрее, чем умножение и сдвиг со сравнением
В статье написано же все, он просто решил, что если он выполнит оптимизацию компилятора сам, то это будет быстрее какого-то определенного компилятора, который он использовал
> он просто решил, что если он выполнит оптимизацию компилятора сам
Не, конпелятр так не умеет.
Здесь защот сокращения области оперделения с полного инт32 до 0 ≤ y ≤ 102499 роботает битовая магия типа знаменитого думовского InvSqrt();
А за перделами диапазона магея не роботает.
Еретически, конпелятор мог бы породить токое джля аргумента uint16_t нопремер, но врят ли он асилит именно такую коньструкцию.
Ну у меня как-то нет привычки не доверять компилятору смотреть в ассемблерный код каждый раз.
Так что хз во што там современные компиляторы превращают код. Но в каментах же некоторые написали, что у них бенчмарк показалый джругое, так што кто знает што там вышло в итоге.
В любом случае, это очередная потенциально бесполезная (а то и вредная) микрооптимизация.
> В любом случае, это очередная потенциально бесполезная (а то и вредная) микрооптимизация.
Бенчмарки нифига не показывают, ибо все варианты выполняются за время порядка наносекунды, поди там различи.
Обращений к памяти и прочему внешнему миру нету, а чисто вычисления на регистрах в современных процах быстры как понос.
Джля проверки именно года на високосность - таки да, трудно придумать сценарий, где она нужна хрениллионы раз подряд и экономия нескольких команд и ~1 наносекунды даст какой-то профит.
Разве что ретроманьякам и микроконтроллерщикам - пару десятков байт сэкономить на объёме кода. ("Делаем вечный календарь в бутсекторе. С музыкой!")
А вот как математическое упражнение - красивое, ящетаю!
Вы лучже длительность интервалов из человечьих дат с тощностью до секунды сделайте. Там не только високосные года, и часовые пояса, но и секунды координации блят.
А возможность получать время TAI например чото нигде стандарты не требуют.
>>Земля такая
Не земля придумала 60 ричную систему и не земля придумала 24 часа +- в обороте.
Считали бы все в миллисекундах от 1970 в обе стороны и бед бы не знали
Зимля и Луна предумоле врот щаца неравномерно, замедляясь, а ещё и с прецессией ёбаной.
А щетать равномерно придумале учонные в TAI https://en.wikipedia.org/wiki/International_Atomic_Time Вот красноглазики могли бы и нормальную шкалу времени сделать, но до этого небось там программиоты уже нахуярили конверсий человечьих дат в unix time и обратно.
Вместо умных россуждений типа "найдём обратный элемент в кольце вычетов по модулю" там на каждом шагу "ну я короче запихнул формулу в солвер и мне выдало значения".
Но формула красивая, да, солвер молодец, всё правильно пощиталый. :)