Comment mettre en œuvre exponentiation d'un nombre rationnel sans racine nième?
-
09-10-2019 - |
Question
Son disponible pour moi Consigner uniquement (base "e"), le péché, tan et sqrt fonctions (seule racine carrée) et les opérateurs arithmétiques de base (+ - * / mod). J'ai aussi la constante "e".
J'expérimente plusieurs problèmes avec Déluge (zoho.com) pour ces restrictions. Il faut mettre en oeuvre l'exponentiation de bases rationnelles (fraction) et les exposants.
La solution
Dites que vous voulez calculer pow(A, B)
Considérons la représentation de B
en base 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))
où b[x]
peut être 0
ou 1
et pow(2, y)
est une puissance entière de deux (à savoir, 1
, 2
, 4
, 1/2
, 1/4
, 1/8
).
Alors,
pow(A, B) = pow(A, sum(b[i] * pow(2, i)) = mul(pow(A, b[i] * pow(2, i)))
Et pow(A, B)
peut être calculé en utilisant uniquement des multiplications et des opérations de racine carrée
Autres conseils
Si vous avez une fonction F () qui fait e ^ x, où e est la constante, et x est un nombre, vous pouvez faire ceci: (a est la base, b est l'exposant, ln est log-e)
a ^ b = F (b * ln (a))
Si vous ne disposez pas que F () ne e ^ x, alors il est plus compliqué. Si votre exposant (b) est rationnel, alors vous devriez être en mesure de trouver des entiers m et n pour que b = m / n, en utilisant une boucle de quelque sorte. Une fois que vous avez m et n, vous faire une autre boucle qui multiples un par lui-même m fois pour obtenir un ^ m, puis des multiples un par lui-même n fois pour obtenir un ^ n, puis diviser un ^ m / a ^ n pour obtenir un ^ (m / n), qui est a ^ b.