log(base "e")、sin、tan、sqrt(平方根のみ)関数と基本的な算術演算子(+-* / mod)でのみ使用できます。「e」定数もあります。
私はこれらの制限についてDeluge(zoho.com)でいくつかの問題を実験しています。有理(分数)基数と指数のべき乗を実装する必要があります。
log(base "e")、sin、tan、sqrt(平方根のみ)関数と基本的な算術演算子(+-* / mod)でのみ使用できます。「e」定数もあります。
私はこれらの制限についてDeluge(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]
、またはは2の整数乗です(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)
乗算と平方根演算のみを使用して計算できます。
e ^ xを実行する関数F()がある場合、ここでeは定数、xは任意の数であり、次のように実行できます。(aは基数、bは指数、lnはlog-e)
a ^ b = F(b * ln(a))
e ^ xを実行するF()がない場合は、注意が必要です。指数(b)が有理数である場合、ある種のループを使用して、b = m/nとなる整数mとnを見つけることができるはずです。mとnを取得したら、aをm回乗算してa ^ mを取得し、次にaをn回乗算してa ^ nを取得し、a ^ m / a^nを除算してa^を取得する別のループを作成します。 (m / n)、これはa^bです。