数のn乗根を計算する最速の方法は何ですか?
試行錯誤の方法は知っていますが、より高速なアルゴリズムが必要です。
これを行う標準的な方法は、ニュートン法です。ご存じない場合は、 x nの導関数は nx n-1です。これは重宝します。1 は適切な最初の推測です。関数 a - x nに適用したい
IIRC、それはフォーム a - x nの関数に超収束していますが、いずれにしても非常に高速です。また、IIRC、収束に失敗したというウィキの警告は、関心のある「優れた」関数に欠けているプロパティを持つより複雑な関数に適用されます。
最速ではありませんが、動作します。選択したタイプを置き換えます。
private static decimal NthRoot(decimal baseValue, int N)
{
if (N == 1)
return baseValue;
decimal deltaX;
decimal x = 0.1M;
do
{
deltaX = (baseValue / Pow(x, N - 1) - x) / N;
x = x + deltaX;
} while (Math.Abs(deltaX) > 0);
return x;
}
private static decimal Pow(decimal baseValue, int N)
{
for (int i = 0; i < N - 1; i++)
baseValue *= baseValue;
return baseValue;
}
n乗根アルゴリズムについて言及していますか?これは試行錯誤の方法ではなく、必要な精度に達するまで繰り返される反復アルゴリズムです。