機能 srand() Perl

は、Perlプログラミング言語を搭機能 srand().

この機能を使用した件数を取得し の配列から数値る機能を返します rand().

多くの機能 srand() の試験を各 走行試験機能 rand() 同じ値を戻す.

この例のコード:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

srand(16);

say int(rand(10));
say int(rand(10));
say int(rand(10));
say int(rand(10));
say int(rand(10));

結果のプログラムにおいては常に5つの数字:

1
0
9
3
3

のプログラムを使 int(rand(10)) にランダムな数の 0を含む) に 9を取得するために使用できます。

にコードが呼び出 srand(16);. この呼び出しを設定機能 rand() を返します 数の疑似ランダムなシーケンス番号 16. そのため、実行するプログラム 同じ結果です。 このプログラムはこの関数を呼び出 srand()、 異なる行でのプログラムを返しの値が異なります。

引数

機能 srand() がなくても使用可能な任意の引数または与えると同一の引数。

に合格以上の引数でエラー:

Too many arguments for srand at script.pl line 3, near "2)"
Execution of script.pl aborted due to compilation errors.

この機能を使用しない 変数 $_. る必要がある場合にはご利用い、それを明示的に渡される機能 srand($_);.

この機能を期待数を引数として与えた場合、その値とします。 この機能を受けない番号 彼女は彼に多くの注目を集めています。

機能が破棄される小数部とします。 srand(-2.9) と同じ srand(2). この例のコードを示します:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

foreach my $n (-2, 2, 2.1, 2.9, -2.1, -2.9) {
    my $real_n = srand($n);
    my @arr;
    foreach (1..5) {
        push @arr, int(rand(10));
    }
    printf "%4s  %s  (%s)\n", $n, $real_n, join(', ', @arr);
}

戻り値

はじめPerl5.14機能 srand() を常に返しますから 14294967296、または文字列 0 but true. この番号は、番号の配列に含まれる機能 rand().

この機能は srand() 電話のない引数で返します の配列を設置したます。

場合に呼び出した関数の引数までの値を返し配列数 インストールされるからこの引数:

▶ Run
#!/usr/bin/perl

use feature qw(say);

say srand(1573); # 1573
say srand(-2.9); # 2

が挙げられているのは興味深いのシーケンス番号 0 の機能文字列を返します 0 but true:

▶ Run
#!/usr/bin/perl

print srand(0);

前Perl5.14の機能 srand() を常に返します 1.

公式文書

ここでは、出力のコマンド perldoc -f srand:

    srand EXPR
    srand   Sets and returns the random number seed for the "rand" operator.

            The point of the function is to "seed" the "rand" function so
            that "rand" can produce a different sequence each time you run
            your program. When called with a parameter, "srand" uses that
            for the seed; otherwise it (semi-)randomly chooses a seed. In
            either case, starting with Perl 5.14, it returns the seed. To
            signal that your code will work *only* on Perls of a recent
            vintage:

                use 5.014;  # so srand returns the seed

            If "srand" is not called explicitly, it is called implicitly
            without a parameter at the first use of the "rand" operator.
            However, there are a few situations where programs are likely to
            want to call "srand". One is for generating predictable results,
            generally for testing or debugging. There, you use
            "srand($seed)", with the same $seed each time. Another case is
            that you may want to call "srand" after a "fork" to avoid child
            processes sharing the same seed value as the parent (and
            consequently each other).

            Do not call "srand()" (i.e., without an argument) more than once
            per process. The internal state of the random number generator
            should contain more entropy than can be provided by any seed, so
            calling "srand" again actually *loses* randomness.

            Most implementations of "srand" take an integer and will
            silently truncate decimal numbers. This means "srand(42)" will
            usually produce the same results as "srand(42.1)". To be safe,
            always pass "srand" an integer.

            A typical use of the returned seed is for a test program which
            has too many combinations to test comprehensively in the time
            available to it each run. It can test a random subset each time,
            and should there be a failure, log the seed used for that run so
            that it can later be used to reproduce the same results.

            "rand" is not cryptographically secure. You should not rely on
            it in security-sensitive situations. As of this writing, a
            number of third-party CPAN modules offer random number
            generators intended by their authors to be cryptographically
            secure, including: Data::Entropy, Crypt::Random,
            Math::Random::Secure, and Math::TrulyRandom.

関連する話題

その他の記事