PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 84


Если вы не вызвали srand сами, Perl версий 5.004 и выше вызывает srand с «хо­рошим» стартовым значением при первом запуске rand. Предыдущие версии это­го не делали, поэтому программы всегда генерировали одну и ту же последователь­ность чисел. Если вы предпочитаете именно такое поведение, вызывайте srand с конкретным аргументом:

srand(  <STOIN>  );

То, что Perl старается выбрать хорошее стартовое значение, еще не гарантиру­ет криптографической безопасности сгенерированных чисел от усердных попы­ток взлома. Информацию о построении надежных генераторов случайных чисел можно найти в учебниках по криптографии.

t> Смотри также--------------------------------------------------------------------------------------------

Описание функции srand Bperlfunc(l). Примеры ее применения приведены в рецептах 2.7 и 2.9.


78   Глава 2 • Числа

2.9.  Повышение фактора случайности

Проблема

Требуется генерировать случайные числа, которые были бы «более случайными», чем выдаваемые генератором Perl. Иногда возникают проблемы, связанные с ог­раниченным выбором стартовых значений в библиотеках С. В некоторых при­ложениях последовательность псевдослучайных чисел начинает повторяться слиш­ком рано.

Решение

Воспользуйтесь другими генераторами случайных чисел — например, теми, ко­торые присутствуют в модулях Math::Random и Math::TrulyRandom с CPAN:

use Math::TrulyRandom;

Srandom = truly_random_value();

use Math_Random;

$random =  random_unifonn();

Комментарий

Для генерации случайных чисел в Perl используется стандартная библиотечная функция С rand(3) (впрочем, на стадии компоновки это можно изменить). Неко­торые реализации функции rand возвращают только 16-разрядные случайные числа или используют слабые алгоритмы, не обеспечивающие достаточной степе­ни случайности.

Модуль Math::TrulyRandom генерирует случайные числа, используя погрешно­сти системного таймера. Процесс занимает некоторое время, поэтому им не стоит пользоваться для генерации большого количества случайных чисел.




Начало  Назад  Вперед