Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2017, 18:13   #1
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию BigInt взять квадратный корень

Как взять из BigInt взять квадратный корень.

В идеале просто нужно узнать береться ли целый корень из здорового числа, если не береться, просто взять целую часть, реально ли?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 10.04.2017, 18:32   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://stackoverflow.com/questions/3...ics-biginteger
посмотрите тут
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.04.2017, 20:04   #3
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

А можно ли как нибудь полное число получать а не вида 1.0050753141303716E+154 ? Complex
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 11.04.2017, 18:58   #4
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Спрошу еще раз, как из комплексного числа взять полное число. Например Compex число
Код:
2,38324213067245E+57
Если я использую вывод .ToString(F0) то получу такой ответ

Код:
2383242130672450000000000000000000000000000000000000000000
Точность то потерялось ведь, надо получить мне такое число

Код:
2383242130672498526278982088024415066832507100643516169533
Возможно ли?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 11.04.2017, 23:04   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от a.n.o.n.i.m Посмотреть сообщение
Возможно ли?
Вы точно ссылку открывали?
и точно пробовали предложенный там код?!

Код:
public static BigInteger Sqrt(this BigInteger n)
    {
        if (n == 0) return 0;
        if (n > 0)
        {
            int bitLength = Convert.ToInt32(Math.Ceiling(BigInteger.Log(n, 2)));
            BigInteger root = BigInteger.One << (bitLength / 2);

            while (!isSqrt(n, root))
            {
                root += n / root;
                root /= 2;
            }

            return root;
        }

        throw new ArithmeticException("NaN");
    }

    private static Boolean isSqrt(BigInteger n, BigInteger root)
    {
        BigInteger lowerBound = root*root;
        BigInteger upperBound = (root + 1)*(root + 1);

        return (n >= lowerBound && n < upperBound);
    }
только это намного медленнее, но за точность надо платить.

p.s. или это я ошибаюсь и данный код не даёт точного ответа?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.04.2017, 18:47   #6
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Речь о кубическом корне а не о квадратном, можете показать на кубическом именно, на квадратном я примеров несколько видел и работает это, но с кубическим не одного, либо же возведение в степень 1/3 тогда.

именно BigInteger.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 13.04.2017, 20:08   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от a.n.o.n.i.m Посмотреть сообщение
Речь о кубическом корне а не о квадратном
оба на, неожиданный поворот.
Т.е. в теме "BigInt взять квадратный корень", в которой Вы пишете:
Цитата:
Сообщение от a.n.o.n.i.m Посмотреть сообщение
Как взять из BigInt взять квадратный корень.
речь идёт о кубическом корне?

у меня нет ответа на этот вопрос.

Если скорость не важна, то находите нижнюю границу, такую, что LessNum1*LessNum1*LessNum1 < Исходное_Число,
а потом в цикле увеличивайте LessNum1, до тех пор, пока выполняется условие LessNum1*LessNum1*LessNum1 < Исходное_Число.
число LessNum1 на предпоследней(или последней) итерации цикла и будет примерным ответом на ваш вопрос (очевидно, что в целых числах точный ответ существует далеко не для всех чисел. - попробуйте, например, найти корень кубический из 21)


И, если нужен кубический корень, то зачем ещё одну тему создавать?
Чем Вас ваша старая тема "BigInteger возведение в степень 1/3" не устраивает?!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
квадратный корень от интеграла chainiksi Общие вопросы C/C++ 0 23.04.2012 23:37
Квадратный корень alex0097 Общие вопросы Delphi 4 24.03.2011 07:47
Квадратный корень на Assemblere artemavd Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 19.11.2010 07:31
квадратный корень в с++ ben95 Общие вопросы C/C++ 9 09.02.2009 15:42
Корень квадратный BETONOMESHALKA Общие вопросы Delphi 2 01.11.2007 10:06