我想在Perl中使用srand函數,但似乎它不設置種子值每往往srand函數在Perl不給正確的範圍值
#!/usr/bin/perl
srand(45);
$int = rand(50);
print "random integer is $int\n";
[[email protected] cookbook]# perl p2.7.pl
random integer is 17.8465963028886
應該不是隨機數是45之間的事情和50?
我想在Perl中使用srand函數,但似乎它不設置種子值每往往srand函數在Perl不給正確的範圍值
#!/usr/bin/perl
srand(45);
$int = rand(50);
print "random integer is $int\n";
[[email protected] cookbook]# perl p2.7.pl
random integer is 17.8465963028886
應該不是隨機數是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;
}
我每次運行它,我得到:
$ 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);
'(45..50)[rand 6]'也可以工作,並且類似於Perl6構造體'(45..50).roll'('.pick'也適用於這種情況)。在這種情況下,我會建議在Perl5中使用它,因爲它使用更多的內存,速度可能會更慢,但如果您從非連續範圍(如'('A',2..10,'J ','Q','K')[rand 13]' –
不應該隨機數是45和50之間的東西嗎?
號srand
將隨機數生成器的種子(我建議你不要修改種子,如果你不知道你在做什麼),它什麼也不做的範圍。這聽起來像你真的想要像
$int = 45 + rand(5);
爲了爲_format_代碼,縮進它四個空格。該代碼也基於標籤突出顯示。 –
粘貼後也可以突出顯示代碼,然後按ctrl-k。 –