Re: "Поймать" ГСЧ - реально? ID:19700 ответ на 19671 |
Пт, 30 июня 2006 09:22 [#] |
|
|
Например, на этой странице в самом низу:
<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 будут сидеть в константах, а не вычисляться каждый раз.
|
|
|