работа ранда в Perl - PullRequest
       3

работа ранда в Perl

2 голосов
/ 21 марта 2011

Как значение, полученное функцией rand, зависит от его начального значения. Если мы не определяем начальное значение, то как отличаются его значения. Ниже приведен код, который я нашел для генерации чисел для целочисленного массива. Любой, пожалуйста, объясните:

#!/usr/bin/perl -w

  # Linear search of an array

  # Note that if you later on want to search for something from a
  # list of values, you shouldn’t have used an array in the first
  # place.

  # Generating 10 integers
  $NUM = 10;
  $MAXINT = 100; # 1 + the maximum integer generated

  srand(); # initialize the randomize seed

  print "Numbers Generated:\n(";
  for $i (1 .. $NUM) {
  push @array, sprintf("%d", rand(1) * $MAXINT);
  print $array[$i-1];
  print ", " unless ($i == $NUM);
  }
  print ")\n\n";

Ответы [ 3 ]

7 голосов
/ 21 марта 2011

Вам не нужно явно вызывать srand; это будет сделано неявно для вас при первом вызове rand, если вы ранее не звонили srand.

srand без параметров попытается инициализировать генератор случайных чисел в случайном состоянии. Он использует / dev / urandom и т.п., если он доступен, и в противном случае использует значение, рассчитанное по текущему времени и pid.

rand () без параметров возвращает значение с плавающей запятой от 0 (включительно) до 1 (исключая). Умножение этого на некоторое целое число дает значение с плавающей запятой от> = 0 и <это целое число. Использование этого в целочисленном контексте (например, в формате «% d») дает целое число от 0 до единицы меньше, чем ваш множитель. <code>rand(x), для x, отличного от 0, возвращает тот же диапазон случайных чисел, что и x * rand(). Так что rand(1) эквивалентно просто rand(), а rand(1) * $MAXINT могло бы быть просто rand($MAXINT).

5 голосов
/ 21 марта 2011

Насколько я знаю, perl использует функции генерации псевдослучайных чисел стандартной библиотеки C.
Это может зависеть от реализации, но обычно это линейный конгруэнтный генератор . Этот вид PRNG использует свое предыдущее значение для генерации следующего, поэтому ему понадобится начальное значение aka seed.

0 голосов
/ 21 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...