Wie Potenzierung einer rationalen Zahl ohne n-te Wurzel implementieren?
-
09-10-2019 - |
Frage
Es ist für mich nur log (Basis "e"), sin, tan und sqrt (nur Quadratwurzel) Funktionen und die grundlegenden arithmetischen Operatoren (+ - * / mod). Ich habe auch das "e" konstant.
Ich experimentiere mehrere Probleme mit Deluge (zoho.com) für diese Einschränkungen. Ich muss Potenzierung der rationalen (Fraktion) Basen und Exponenten implementieren.
Lösung
Say möchten Sie berechnen pow(A, B)
Betrachten Sie die Darstellung von B
in der Basis 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))
wobei b[x]
kann 0
oder 1
und pow(2, y)
eine ganzzahlige Potenz von zwei (das heißt, 1
, 2
, 4
, 1/2
, 1/4
, 1/8
) werden.
Dann
pow(A, B) = pow(A, sum(b[i] * pow(2, i)) = mul(pow(A, b[i] * pow(2, i)))
Und so pow(A, B)
berechnet werden kann nur Multiplikationen und Quadratwurzel-Operationen mit
Andere Tipps
Wenn Sie eine Funktion F () haben, das tut e ^ x, wobei e die Konstante ist, und x ist eine beliebige Zahl, dann können Sie dies tun: (a Base ist, b Exponenten ln ist log-e)
a ^ b = F (b * ln (a))
Wenn Sie nicht F () haben, das tut, e ^ x, dann wird es schwieriger. Wenn Ihr Exponent (b) rational ist, dann sollten Sie in der Lage sein, ganze Zahlen finden m und n, so dass b = m / n, eine Schleife von einer Art verwendet wird. Sobald Sie m haben und n, machen Sie eine weitere Schleife, die ein Vielfaches ein selbst mal m a ^ m zu erhalten, multipliziert dann eine selbst n-mal eine bekommen ^ n, dann teilen a ^ m / a ^ n zu bekommen a ^ (m / n), die a ^ b ist.