Осторожно, стотья содержит пропаганду вайбкодинга!
Вместо умных россуждений типа "найдём обратный элемент в кольце вычетов по модулю" там на каждом шагу "ну я короче запихнул формулу в солвер и мне выдало значения".
Но формула красивая, да, солвер молодец, всё правильно пощиталый. :)
Кстати, нащот fast - лукавство. Наивная реализация, которая сначала проверяет делимость на 4, в 3/4 случаев быстрее, чем умножение и сдвиг со сравнением
В статье написано же все, он просто решил, что если он выполнит оптимизацию компилятора сам, то это будет быстрее какого-то определенного компилятора, который он использовал
> он просто решил, что если он выполнит оптимизацию компилятора сам
Не, конпелятр так не умеет.
Здесь защот сокращения области оперделения с полного инт32 до 0 ≤ y ≤ 102499 роботает битовая магия типа знаменитого думовского InvSqrt();
А за перделами диапазона магея не роботает.
Еретически, конпелятор мог бы породить токое джля аргумента uint16_t нопремер, но врят ли он асилит именно такую коньструкцию.
Ну у меня как-то нет привычки не доверять компилятору смотреть в ассемблерный код каждый раз.
Так что хз во што там современные компиляторы превращают код. Но в каментах же некоторые написали, что у них бенчмарк показалый джругое, так што кто знает што там вышло в итоге.
В любом случае, это очередная потенциально бесполезная (а то и вредная) микрооптимизация.
Вместо умных россуждений типа "найдём обратный элемент в кольце вычетов по модулю" там на каждом шагу "ну я короче запихнул формулу в солвер и мне выдало значения".
Но формула красивая, да, солвер молодец, всё правильно пощиталый. :)