Как реализовать экспоненты рационального числа без n -й корень?

StackOverflow https://stackoverflow.com/questions/4439797

  •  09-10-2019
  •  | 
  •  

Вопрос

Он доступен для меня только журнал (база "E"), SIN, TAN и SQRT (только квадратный корень) функции и основные арифметические операторы (+ - * / mod). У меня также есть постоянная "E".

Я экспериментирую несколько проблем с потоком (Zoho.com) для этих ограничений. Я должен реализовать экспоненты рациональных (фракционных) оснований и экспонентов.

Это было полезно?

Решение

Скажем, вы хотите рассчитать pow(A, B)

Рассмотреть представление B в базе 2:

B = b[n]   * pow(2, n    ) +
    b[n-1] * pow(2, n - 1) +
    ...
    b[2]   * pow(2, 2    ) +
    b[1]   * pow(2, 1    ) +
    b[0]   * pow(2, 0    ) +
    b[-1]  * pow(2, -1   ) +
    b[-2]  * pow(2, -2   ) +
    ...

 = sum(b[i] * pow(2, i))

куда b[x] может быть 0 или 1 и pow(2, y) целочисленная сила двух (т.е. 1, 2, 4, 1/2, 1/4, 1/8).

Затем,

pow(A, B) = pow(A, sum(b[i] * pow(2, i)) = mul(pow(A, b[i] * pow(2, i)))

И так pow(A, B) можно рассчитать только умножения и квадратные корневые операции

Другие советы

Если у вас есть функция f (), которая выполняет e^x, где e является постоянной, а x-любое число, то вы можете сделать это: (a base, b Is Exponent, ln-log-e)

a^b = f (b * ln (a))

Если у вас нет f (), который делает e^x, то это становится сложнее. Если ваш показатель (B) рациональный, то вы сможете найти целые числа M и N, чтобы B = M/N, используя какую -то цикл. Как только у вас есть M и N, вы делаете еще один цикл, который сам по себе радует, чтобы получить^m, а затем множество времен, чтобы получить^n, а затем разделите a^m/a^n, чтобы получить^^ (M/N), который является a^b.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top