2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 
Сообщение14.05.2008, 21:01 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
А нет разве аналога формулы Стирлинга с точной оценкой сверху?

 Профиль  
                  
 
 
Сообщение14.05.2008, 22:15 
Аватара пользователя


06/01/06
967
Помимо аппроксимации Стирлинга есть еще аппроксимация Ланцоша для гамма-функции: http://en.wikipedia.org/wiki/Lanczos_approximation

 Профиль  
                  
 
 
Сообщение14.05.2008, 22:39 


06/03/08
8
Brukvalub писал(а):
Обсуждение убедило меня, что применение ф-лы Стирлинга для решения этой задачи - наилучший выход.

Был бы наилучшим еслиб числа представлялись в стандартных типах данных , а у меня число представляется ввиде массива,а деление такого массива на вещественное число задача не простая, но всеравно спасибо за помощь!

 Профиль  
                  
 
 
Сообщение14.05.2008, 23:49 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Я понял: Вас не затрудняет выделить $946795322485$ байт памяти, организовать умножение, и выполнить $9 \times 10^{10}$ операций над такого объёма памятью. Но затрудняет подсчитать сумму логарифмов. :) По опыту, могу сказать: вторая задача намного проще. Хотя... $9 \times 10^{10}$ логарифмов скорее всего займут пару-тройку часов (да ещё и надо правильно организовать вычисления, чтобы избежать потери точности).

А вот где Вы возьмёте терабайт оперативной памяти, Вам виднее.

Можно немного сжульничать: 90000000000! будет кончаться на 22499997696 нулей, и их можно не считать и не хранить. Сомневаюсь, однако, что это сильно Вам поможет. Ну, пару-тройку процентов.

 Профиль  
                  
 
 
Сообщение15.05.2008, 10:17 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
незваный гость писал(а):
:evil:
Я понял: Вас не затрудняет выделить $946795322485$ байт памяти, организовать умножение, и выполнить $9 \times 10^{10}$ операций над такого объёма памятью. Но затрудняет подсчитать сумму логарифмов. :) По опыту, могу сказать: вторая задача намного проще. Хотя... $9 \times 10^{10}$ логарифмов скорее всего займут пару-тройку часов (да ещё и надо правильно организовать вычисления, чтобы избежать потери точности).

А вот где Вы возьмёте терабайт оперативной памяти, Вам виднее.

Можно немного сжульничать: 90000000000! будет кончаться на 22499997696 нулей, и их можно не считать и не хранить. Сомневаюсь, однако, что это сильно Вам поможет. Ну, пару-тройку процентов.


Мне почему-то кажется, что не пару-тройку часов, а значительно быстрее.

И тогда уж, чтобы память не терять, лучше не в десятичной, а в 256-ричной системе всё перемножать. Один разряд --- один байт, всё хорошо ужмётся. И в скорости выигрыш будет. А потом полученный результат уже можно и в десятичную систему преобразовать.

 Профиль  
                  
 
 
Сообщение15.05.2008, 10:58 
Заслуженный участник
Аватара пользователя


01/03/06
13626
Москва
Дальнейшее обсуждение убедило меня, что применение ф-лы Стирлинга для решения этой задачи - не самый наилучший выход. :D :D :D

 Профиль  
                  
 
 
Сообщение15.05.2008, 11:14 
Заслуженный участник


22/01/07
605
ТНК писал(а):
Был бы наилучшим еслиб числа представлялись в стандартных типах данных , а у меня число представляется ввиде массива,а деление такого массива на вещественное число задача не простая, но всеравно спасибо за помощь!

А в чем проблема перевести в стандатрный тип и поделить?

 Профиль  
                  
 
 
Сообщение15.05.2008, 17:59 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Профессор Снэйп писал(а):
И тогда уж, чтобы память не терять, лучше не в десятичной, а в 256-ричной системе всё перемножать. ‹…› И в скорости выигрыш будет. А потом полученный результат уже можно и в десятичную систему преобразовать.

Перевод в десятичную систему может занять заметно больше времени, чем выигрыш по сравнению с вычислением в десятичной. Это дорогая (и плохо оптимизируемая) операция.

Правда, есть другой трюк: считать в 100-ричной (или иной системе с основанием $10^k$).

Gafield писал(а):
А в чем проблема перевести в стандатрный тип и поделить?

Число больно велико.

 Профиль  
                  
 
 
Сообщение15.05.2008, 18:06 
Заслуженный участник


22/01/07
605
Для вычислений числа цифр в 9000000000! вычисления проводятся с числом 90000000000, разве оно большое для стандартных типов данных?

 Профиль  
                  
 
 
Сообщение15.05.2008, 19:08 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Gafield писал(а):
Для вычислений числа цифр в 9000000000! вычисления проводятся с числом 90000000000, разве оно большое для стандартных типов данных?

Целых — да (90000000000). Но речь идёт о представлении 9000000000! в виде массива. А вот это уж точно велико.

 Профиль  
                  
 
 
Сообщение15.05.2008, 19:56 
Аватара пользователя


06/01/06
967
Изображение

 Профиль  
                  
 
 
Сообщение15.05.2008, 21:27 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Я думаю, требуются ответы чуточку поточнее. Особенно в клетке D2. С 946795322484 цифрами после запятой.

 Профиль  
                  
 
 
Сообщение15.05.2008, 21:34 
Заслуженный участник


22/01/07
605
А зачем целые? Надо же вычислять логарифм и т.д. Двойной точности вполне хватит . В числе всего то 11 знаков.

 Профиль  
                  
 
 
Сообщение15.05.2008, 22:46 
Заслуженный участник
Аватара пользователя


23/07/05
17976
Москва
Логарифм гамма-функции как-то считается. Mathematica 5.1 выдаёт

Код:
Floor[LogGamma[9000000001]/Log[10]]+1


$85679532254$

за очень малую долю секунды.

 Профиль  
                  
 
 
Сообщение16.05.2008, 00:47 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Someone писал(а):
Логарифм гамма-функции как-то считается.

Легко считается через хорошо известное разложение в ряд. Особенно для больших $x$, как в нашем случае.

Оценка (2-3 часа) давалась на суммирование логарифмов в лоб.

Я, кстати, не исключаю, что подсчёт факториала такого большого числа не будет эффективней через $\ln \Gamma$ и ряды. Тут уже надо либо проверять, либо очень аккуратно считать операции.

Someone писал(а):
$85679532254$

Разное количество ноликов между 9 и 1.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group