perl 中的 srand 函数没有给出正确的值范围
srand function in perl not giving correct range of values
我正在尝试在 perl 中使用 srand 函数,但似乎它并没有经常设置种子值
#!/usr/bin/perl
srand(45);
$int = rand(50);
print "random integer is $int\n";
[root@localhost cookbook]# perl p2.7.pl
random integer is 17.8465963028886
随机数不应该在 45 到 50 之间吗?
Shouldn't the random number be something between 45 and 50?
没有。 srand
设置随机数生成器的种子(如果你不知道自己在做什么,我建议你不要修改种子),它对范围没有任何影响。听起来你真的想要
$int = 45 + rand(5);
srandseeds随机数生成器。大多数编程语言中的随机数并不是真正随机的,但对于大多数用途来说这没问题。设置种子将允许随机数序列一遍又一遍地重复。来自 Perldoc:
[T]here 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.
这是一个示例程序:
#! /usr/bin/env perl
#
use strict; # Lets you know when you misspell variable names
use warnings; # Warns of issues (using undefined variables
use feature qw(say);
srand 10;
for my $count ( (1..6) ) {
say rand 10;
}
每次我 运行 它,我得到:
$ test.pl
8.78851122762175
7.95806622921617
4.80827281057042
5.25673258208322
4.59162474505394
9.45475794360377
一遍又一遍。那是因为我每次都使用相同的 seed,允许随机数函数一遍又一遍地重复。这在测试中很有用。
删除那 srand 10
行,程序每次都会生成不同的随机数序列。
根据 Perldoc rand:
Returns a random fractional number greater than or equal to 0 and less than the value of EXPR, [the argument given]. EXPR should be positive.
继续:
Apply int()
to the value returned by rand()
if you want random integers instead of random fractional numbers. For example, int(rand(10))
returns a random integer between 0
and 9
, inclusive.
因此,rand 50
return 是一个介于 0 和 50 之间的值(但不是 50)。也就是说,int( rand 50 )
将 return 一个介于 0 和 49 之间的 整数 。如果我想要一个介于 45 和 50 之间的数字,我必须首先决定是否应该使用 50我想要的数字之一。如果是,我需要六个数字的范围(45、46、47、48、49、50)。因此,我想使用 int( rand 6 )
给我一个介于 0 和 5 之间的整数。然后我想在其中加上 45 得到 45 的范围,从而得到 45 到 50 的范围:
say 45 + int( rand 6 );
我正在尝试在 perl 中使用 srand 函数,但似乎它并没有经常设置种子值
#!/usr/bin/perl
srand(45);
$int = rand(50);
print "random integer is $int\n";
[root@localhost cookbook]# perl p2.7.pl
random integer is 17.8465963028886
随机数不应该在 45 到 50 之间吗?
Shouldn't the random number be something between 45 and 50?
没有。 srand
设置随机数生成器的种子(如果你不知道自己在做什么,我建议你不要修改种子),它对范围没有任何影响。听起来你真的想要
$int = 45 + rand(5);
srandseeds随机数生成器。大多数编程语言中的随机数并不是真正随机的,但对于大多数用途来说这没问题。设置种子将允许随机数序列一遍又一遍地重复。来自 Perldoc:
[T]here 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 usesrand($seed)
, with the same$seed
each time.
这是一个示例程序:
#! /usr/bin/env perl
#
use strict; # Lets you know when you misspell variable names
use warnings; # Warns of issues (using undefined variables
use feature qw(say);
srand 10;
for my $count ( (1..6) ) {
say rand 10;
}
每次我 运行 它,我得到:
$ test.pl
8.78851122762175
7.95806622921617
4.80827281057042
5.25673258208322
4.59162474505394
9.45475794360377
一遍又一遍。那是因为我每次都使用相同的 seed,允许随机数函数一遍又一遍地重复。这在测试中很有用。
删除那 srand 10
行,程序每次都会生成不同的随机数序列。
根据 Perldoc rand:
Returns a random fractional number greater than or equal to 0 and less than the value of EXPR, [the argument given]. EXPR should be positive.
继续:
Apply
int()
to the value returned byrand()
if you want random integers instead of random fractional numbers. For example,int(rand(10))
returns a random integer between0
and9
, inclusive.
因此,rand 50
return 是一个介于 0 和 50 之间的值(但不是 50)。也就是说,int( rand 50 )
将 return 一个介于 0 和 49 之间的 整数 。如果我想要一个介于 45 和 50 之间的数字,我必须首先决定是否应该使用 50我想要的数字之一。如果是,我需要六个数字的范围(45、46、47、48、49、50)。因此,我想使用 int( rand 6 )
给我一个介于 0 和 5 之间的整数。然后我想在其中加上 45 得到 45 的范围,从而得到 45 到 50 的范围:
say 45 + int( rand 6 );