Как реализовать экспоненты рационального числа без n -й корень?
-
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.