我试图在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
Run Code Online (Sandbox Code Playgroud)
随机数不应该在45到50之间吗?
该函数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;
}
Run Code Online (Sandbox Code Playgroud)
每次我运行它,我得到:
$ test.pl
8.78851122762175
7.95806622921617
4.80827281057042
5.25673258208322
4.59162474505394
9.45475794360377
Run Code Online (Sandbox Code Playgroud)
一遍又一遍.那是因为我每次都使用相同的种子,允许随机数函数反复重复.这在测试中很有用.
摆脱那条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 );
Run Code Online (Sandbox Code Playgroud)
随机数不应该在45到50之间吗?
编号srand设置随机数生成器的种子(如果你不知道你在做什么,我建议你不要修改种子),它对范围没有任何作用.听起来你真的想要类似的东西
$int = 45 + rand(5);
Run Code Online (Sandbox Code Playgroud)