Просмотреть всю тему ""Поймать" ГСЧ - реально?" »»
Re: "Поймать" ГСЧ - реально?   ID:19700   ответ на 19671 Пт, 30 июня 2006 09:22 [#]
CorwinXX Закрыть блок (иконки IM) Форумы CasinoGames
Например, на этой странице в самом низу:
<a rel="nofollow" href="http://newasp.omskreg.ru/probability/cgi-bin/pt_rus/ptcgi.ex" target="_blank">http://newasp.omskreg.ru/probability...t_rus/ptcgi.ex e?9024</a>



Что касается огромного значения:

Вряд ли тебе нужно такое большое число. Полагаю, что это всего лишь промежуточный результат, и дальше ты будешь делить его на что-нибудь. Тогда можно представить факториал в виде произведения двух чисел. Например, перемножать отдельно чётные и нечётные множители. Так ты сможешь вычислять факторилы до (10^4932)^2, то есть до 10^9800. Главное потом в вычислениях сделать деление до умножения, чтобы не было переполнения.

Можно пойти более универсальным путём. Отдельно вычислять основание и отдельно степень результата.
То есть, во время вычислений ты сравниваешь текущее значение с sqrt(MAX_EXTENDED_NUMBER) и "скидываешь" степень в специальную переменную.

Пример:
a = b * c
if(abs(a) > 10^2400) { a = a/(10^2400); exp += 2400 }

В переменной a у нас результат вычислений, но его нужно будет в конце домножить на 10^exp. (В переменной exp у нас порядок результата).


з.ы. Поправил - второе сравнение не нужно.

з.з.ы. Ну и понятно, что 10^2400 и 2400 будут сидеть в константах, а не вычисляться каждый раз.