Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発
  1. Perl
  2. 標準関数
  3. here

rand関数 - 乱数を生成する

乱数を生成するにはrand関数を使用します。引数で指定した数より小さい0以上の数値がランダムで生成されます。

$ret = rand 10;

乱数とはランダムな数のことです。アプリケーションを作成するときは、時にランダムな数がほしいときがあります。ゲームでさいころを投げたりクイズを出したりするときに使われます。またデータを暗号化するときの鍵の作成などにも使われたりします。

rand関数に、たとえば「10」を指定すれば、「2.34...」「5.36...」「9.45...」など、0以上で、10より小さい数が、生成されます。

サンプル

rand関数で生成した乱数を利用するサンプルです。

use strict;
use warnings;

print "(1)乱数を発生させる。( 10以下の整数 )\n";
for my $i (1 .. 10) {
  # rand関数は引数より小さいランダムな数を返却
  print "$i回目: " . int(rand 10) . "\n"; 
}
print "\n";

print "(2)ランダムに配列の要素を選択する。\n";
my @members = qw/aya toru kato kenji mina haruna kita michel kotaro/;
for my $i ( 1 .. 10 ) {
  # @members は配列の要素の個数
  print "$i回目: " . $members[int(rand scalar @members)] . "\n";
}                                       

コード解説

乱数を生成する

rand(10);

乱数を生成するには=rand関数を使います。rand関数は0以上で引数で与えられた整数より小さいランダムな小数を返却します。

10 を与えた場合は、0以上で10より小さいランダムな小数が返却されます。10は含まれないことに注意しましょう。9.99999は返却される可能性がありますが、10は返却されません。

int(rand 10);

int関数を使うと整数部のみが取得できます。int(rand 10) とすると 0 から 9 までの整数が取得できます。

ランダムに配列の要素を選択する

my @members = qw/aya toru kato kenji mina haruna kita michel kotaro/;
$members[int(rand scalar @members)];

配列の要素をランダムに選択するには、rand関数に配列の要素数を与えて、int関数で整数部を取り出して、添え字にすればよいです。

配列の要素が10であれば、0~9までの乱数が生成され、対応する要素が返却されます。

再現性のある乱数を生成するには

再現性のある乱数を生成するには、rand関数を呼び出す前にsrand関数に適当な数値を与えます。

# 乱数発生アルゴリズムを初期化
srand $seed;
rand $num;

精度のよい擬似乱数を求めるには

Perlのrand関数よりも精度のよい乱数を求めたい場合はCPANで入手できるMath::Random::MTモジュールを利用するのが便利です。

「メルセンヌツイスター法」という方法で、精度のよい乱数を求めます。