LINUX.ORG.RU

История изменений

Исправление Sorcerer, (текущая версия) :

Теперь надо найти такой n для stride(n), чтобы stride(n) = gidsetsize;

Вот этого не понял. Зачем? Просто же считаем 3^gitsetsize/2-1/2.

UPD: А, понял. Да, надо, но так ещё медленнее получается.

Таким образом можно сократить много всяких примитивных циклов

Надо ещё посмотреть на количество итераций в цикле. Для текущего NGROUPS_MAX максимальное число итераций равно 11. Вряд ли вычисления с плавающей точкой по этой формуле будут быстрее 11 операций умножения и 11 инкрементов.

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

Исправление Sorcerer, :

Теперь надо найти такой n для stride(n), чтобы stride(n) = gidsetsize;

Вот этого не понял. Зачем? Просто же считаем 3^gitsetsize/2-1/2.

Таким образом можно сократить много всяких примитивных циклов

Надо ещё посмотреть на количество итераций в цикле. Для текущего NGROUPS_MAX максимальное число итераций равно 11. Вряд ли вычисления с плавающей точкой по этой формуле будут быстрее 11 операций умножения и 11 инкрементов.

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

Исходная версия Sorcerer, :

Теперь надо найти такой n для stride(n), чтобы stride(n) = gidsetsize;

Вот этого не понял. Зачем? Просто же считаем 3^gitsetsize/2-1/2.

Таким образом можно сократить много всяких примитивных циклов

Надо ещё посмотреть на количество итераций в цикле. Для текущего NGROUPS_MAX максимальное число итераций равно 11. Вряд ли вычисления с плавающей точкой по этой формуле (да ещё с одним делением) будут быстрее 11 операций умножения и 11 инкрементов.

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