我正在尝试在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之间吗?
答案 0 :(得分:7)
srand 种子 随机数生成器。大多数编程语言中的随机数并非真正随机,但对大多数用途来说这是可以的。设置种子将允许随机数序列反复重复。来自Perldoc:
[T]以下是程序可能要调用
srand
的几种情况。一种是产生可预测的结果,通常用于测试或调试。在那里,您使用srand($seed)
,每次都使用相同的$seed
。
以下是一个示例程序:
#! /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
一遍又一遍。那是因为我每次都使用相同的种子,允许随机数函数反复重复。这在测试中很有用。
删除srand 10
行,程序每次都会生成不同的随机数序列。
根据Perldoc rand:
返回一个大于或等于0且小于EXPR值的随机小数,[给定的参数]。 EXPR应该是积极的。
它继续:
如果您想要随机整数而不是随机小数,请将
int()
应用于rand()
返回的值。例如,int(rand(10))
会返回0
和9
之间的随机整数。
因此,rand 50
返回0到50之间的值(但不是50)。说,int( rand 50 )
将在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 );
答案 1 :(得分:5)
随机数不应该在45到50之间吗?
没有。 srand
设置随机数生成器的种子(如果您不知道自己在做什么,我建议您不要修改种子),它对范围无效。听起来你真的想要像
$int = 45 + rand(5);