Оптимизация времени компиляции Math.pow - PullRequest
1 голос
/ 05 октября 2011

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

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

pow(CONSTANT, n)

, встраивая предварительно вычисленные последовательные квадраты CONSTANT в исполняемый файл.Я не уверен, действительно ли это хорошая идея.

Но когда дело доходит до

pow(n, CONSTANT)

, я не могу думать ни о чем.Есть ли известный способ сделать это эффективно?У умов StackOverflow есть идеи по любой проблеме?

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Предполагая, что pow(a,b) реализовано как exp(b * log(a)) (что, вероятно, и есть), если a является константой, вы можете предварительно вычислить ее log. Если b является константой, это помогает, только если это также целое число.

1 голос
/ 05 октября 2011

Возведение в квадрат по квадрату идеально подходит для второго случая, просто разверните цикл и вставьте константы. Но только если CONSTANT, конечно, является целым числом.

...