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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top