Рассчитать мощность с фиксированным (постоянным) показателем

У меня есть случай, когда мне нужно вычислить x^y a огромное количество раз, где y является константой, а x гарантированно будет действительным числом.

Как это может быть сделано более эффективно, чем Pow(double x, double y), который будет выполнять различные проверки и оценки?

Я рассчитываю на пересчет y-преобразования.

РЕДАКТИРОВАТЬ

Оба являются действительными числами. х = 0 ... 4 000 000 000

4 ответа

Решение

Запомните это равенство:

x^y = exp(y * ln(x))

Так что вы можете пропустить Pow и использовать exp а также ln,

Ты не можешь. Хотя у - постоянная, х - переменная, поэтому вы ничего не можете сделать. Я бы не стал беспокоиться об этом. Метод pow() очень хорошо оптимизирован.

Единственное, что вы можете сделать, - это предварительно рассчитать значения для множества различных х и сохранить их в словаре, если только они не станут действительно большими.

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

Вы, вероятно, должны попытаться использовать собственную библиотеку и вызвать ее с помощью JNI.

Если вы знаете y, может быть, вы можете разложить его на умножение меньших чисел и вычислить степени степеней. Например, если y = 6 ты мог бы сделать

y = 2 * 3
power = pow( pow(x, 3), 2)

Не знаю, будет ли это все же быстрее.

Другие вопросы по тегам