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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2009, 20:36   #1
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию корень из большого числа BigInteger

Вопрос состоит из 2 частей.

В C# есть такая штука: структура System.Numerics.BigInteger для работы с большими числами. Вот только там нет среди методов функции взятия корня. Степени только целые есть.
И какой же метод использовать, если нужно взять корень?
Ну допустим, что корня нет. Тогда мы можем сделать таблицу со значениями квадратов чисел. И дальше искать по ней на совпадение.
Например, если число имеется в таблице, то мы знаем, что корень из него - целое число.
Насколько быстр поиск по такой отсортированной таблице?
Например, у меня есть таблица квадратов чисел от 1 до миллиарда, и мне нужно проверить, есть ли там это число.
Как лучше такую таблицу хранить в C#, и как искать по ней? Быстрее ли это будет, чем брать корень?
motorway вне форума Ответить с цитированием
Старый 08.12.2009, 14:26   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Я бы в Hashtable хранил. Ключ - число, значение - корень.
Hollander вне форума Ответить с цитированием
Старый 08.12.2009, 18:09   #3
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Похоже, все-таки это не лучший метод - с таблицей. К тому же потестировал скорость вычислений с большими числами, и оказалось, что PHP примерно в 2 раза быстрее C#.
motorway вне форума Ответить с цитированием
Старый 08.12.2009, 18:30   #4
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Вот готовый BigInteger на C#. В нем есть метод sqrt, посмотри как там сделано и напиши свой метод.
http://www.codeproject.com/KB/cs/biginteger.aspx
Документация: http://groups.ist.utl.pt/meic-padi/p...ntegerDoc.html

Если не понравился класс, можешь сам посчитать, вот описания методов:
http://en.wikipedia.org/wiki/Methods...g_square_roots
http://en.wikipedia.org/wiki/Newton's_method

Последний раз редактировалось Hollander; 08.12.2009 в 18:33.
Hollander вне форума Ответить с цитированием
Старый 08.12.2009, 19:18   #5
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Дело не только в корне - даже умножение более медленное, чем на PHP.
motorway вне форума Ответить с цитированием
Старый 09.12.2009, 11:35   #6
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Ты спрашиваешь, что быстрее или как сделать? Ну возможно, что php быстрее считает, так что? Скорее всего есть другие платформы(возможно Java) где это еще быстрее.
Hollander вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кубический корень числа UnrealSP Помощь студентам 0 02.11.2009 18:04
Кубический корень от отрицательного числа Vito89 Помощь студентам 9 29.09.2009 14:40
корень произвольной степени из большого числа с помощью BCMath motorway PHP 8 25.09.2009 18:50
Как вычислит корень из числа? Paul_AG Общие вопросы C/C++ 6 04.04.2009 14:47