n-й корневой алгоритм - PullRequest
       20

n-й корневой алгоритм

4 голосов
/ 03 октября 2010

Какой самый быстрый способ вычислить n -й корень числа?

Мне известен метод Try and Fail, но мне нужен более быстрый алгоритм.

Ответы [ 4 ]

10 голосов
/ 03 октября 2010

Канонический способ сделать это - Метод Ньютона .Если вы не знаете, производная от x n равна nx n-1 .Это пригодится.1 хорошая первая догадка.Вы хотите применить его к функции a - x n

IIRC, она суперконвергентна с функциями вида a - x n , но в любом случае это довольнобыстро.Кроме того, IIRC, предупреждение в вики о том, что оно не сходится, будет применяться к более сложным функциям, обладающим свойствами, которых не хватает интересующим вас «приятным» функциям.

4 голосов
/ 21 августа 2013

Не самый быстрый, но работает.Замените выбранный вами тип:

    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;
    }
2 голосов
/ 03 октября 2010

Вы имеете в виду n-й корневой алгоритм ? Это не метод проб и ошибок, а итеративный алгоритм, который повторяется до тех пор, пока не будет достигнута требуемая точность.

0 голосов
/ 11 июля 2013

Извлечение корня n с помощью ведической математики - самый быстрый метод.Подробнее об алгоритме см. http://www.vedicmaths.org/Journal.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...