n番目のルートなしで合理的な数値の指数を実装する方法は?
-
09-10-2019 - |
質問
ログのみ(ベース「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]
可能です 0
また 1
と pow(2, y)
2つの整数のパワーです(つまり、 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はbase、bはexponent、ln is log-eです)
a^b = f(b * ln(a))
e^xを実行するf()がない場合、それはより難しくなります。指数(b)が合理的である場合、ある種のループを使用してb = m/nに整数mとnを見つけることができるはずです。 mとnを取得したら、A^mを取得するためにMを1回自体に乗算する別のループを作成し、A^nを取得するためにA^nをn回、次にA^m/a^nを分割してA^を取得します。 (m/n)、これは^bです。
所属していません StackOverflow