📄 ch02_09.htm
字号:
<HTML><HEAD><TITLE>Recipe 2.8. Generating Different Random Numbers (Perl Cookbook)</TITLE><METANAME="DC.title"CONTENT="Perl Cookbook"><METANAME="DC.creator"CONTENT="Tom Christiansen & Nathan Torkington"><METANAME="DC.publisher"CONTENT="O'Reilly & Associates, Inc."><METANAME="DC.date"CONTENT="1999-07-02T01:30:11Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-243-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch02_01.htm"TITLE="2. Numbers"><LINKREL="prev"HREF="ch02_08.htm"TITLE="2.7. Generating Random Numbers"><LINKREL="next"HREF="ch02_10.htm"TITLE="2.9. Making Numbers Even More Random"></HEAD><BODYBGCOLOR="#FFFFFF"><img alt="Book Home" border="0" src="gifs/smbanner.gif" usemap="#banner-map" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Perl Cookbook"><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><p><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch02_08.htm"TITLE="2.7. Generating Random Numbers"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 2.7. Generating Random Numbers"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1"><ACLASS="chapter"REL="up"HREF="ch02_01.htm"TITLE="2. Numbers"></A></FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch02_10.htm"TITLE="2.9. Making Numbers Even More Random"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 2.9. Making Numbers Even More Random"BORDER="0"></A></TD></TR></TABLE></DIV><DIVCLASS="sect1"><H2CLASS="sect1"><ACLASS="title"NAME="ch02-40473">2.8. Generating Different Random Numbers</A></H2><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch02-pgfId-573">Problem</A></H3><PCLASS="para">Every time you run your program you get the same set of "random" numbers. You want Perl to produce different random numbers each time. This is important in nearly every application of random numbers, especially games.</P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch02-pgfId-579">Solution</A></H3><PCLASS="para">Use Perl's <CODECLASS="literal">srand</CODE><ACLASS="indexterm"NAME="ch02-idx-1000008039-0"></A> function:</P><PRECLASS="programlisting">srand EXPR;</PRE></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch02-pgfId-587">Discussion</A></H3><PCLASS="para">Making random numbers is hard. The best that computers can do, without special hardware, is generate "pseudo-random" numbers, which are evenly distributed in their range of values. These are generated using a mathematical formula, which means that given the same <ICLASS="firstterm">seed</I> (starting point), two programs will produce identical pseudo-random numbers.</P><PCLASS="para">The <CODECLASS="literal">srand</CODE> function creates a new seed for the pseudo-random number generator. If given an argument, it uses that number as the seed. If no argument is given, <CODECLASS="literal">srand</CODE> uses a value that's reasonably difficult to guess as the seed (as of Perl 5.004 or later; before that it just used <CODECLASS="literal">time</CODE>, which isn't random at all). Don't call <CODECLASS="literal">srand</CODE> more than once in a program.</P><PCLASS="para">If you haven't called <CODECLASS="literal">srand</CODE> yourself, Perl version 5.004 and later calls <CODECLASS="literal">srand</CODE> with a "good" seed the first time you call <CODECLASS="literal">rand</CODE>. Earlier versions did not, so the same program always produced the same sequence. If you prefer that behavior, call <CODECLASS="literal">srand</CODE> yourself with a particular seed:</P><PRECLASS="programlisting">srand( <STDIN> );</PRE><PCLASS="para">Just because Perl tries to use a good default seed does not necessarily guarantee that the numbers generated are cryptographically secure against the most intrepid crackers. Textbooks on cryptography are usually good sources of cryptographically secure random number generators.</P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch02-pgfId-601">See Also</A></H3><PCLASS="para">The <CODECLASS="literal">srand</CODE> function in <EMCLASS="emphasis">perlfunc </EM>(1); <ACLASS="olink"HREF="../prog/ch03_01.htm">Chapter 3</A> of <ACLASS="citetitle"HREF="../prog/index.htm"TITLE="Programming Perl"><CITECLASS="citetitle">Programming Perl</CITE></A>; Recipes <ACLASS="xref"HREF="ch02_08.htm"TITLE="Generating Random Numbers">Recipe 2.7</A> and <ACLASS="xref"HREF="ch02_10.htm"TITLE="Making Numbers Even More Random">Recipe 2.9</A>; Bruce Schneier's excellent <CITECLASS="citetitle">Applied Cryptography </CITE>; John Wiley & Sons (1995) <ACLASS="indexterm"NAME="ch02-idx-1000008990-0"></A><ACLASS="indexterm"NAME="ch02-idx-1000008990-1"></A></P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch02_08.htm"TITLE="2.7. Generating Random Numbers"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 2.7. Generating Random Numbers"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="book"HREF="index.htm"TITLE="Perl Cookbook"><IMGSRC="../gifs/txthome.gif"ALT="Perl Cookbook"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch02_10.htm"TITLE="2.9. Making Numbers Even More Random"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 2.9. Making Numbers Even More Random"BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228">2.7. Generating Random Numbers</TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="index"HREF="index/index.htm"TITLE="Book Index"><IMGSRC="../gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228">2.9. Making Numbers Even More Random</TD></TR></TABLE><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><FONTSIZE="-1"></DIV<!-- LIBRARY NAV BAR --> <img src="../gifs/smnavbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links"><p> <a href="copyrght.htm">Copyright © 2002</a> O'Reilly & Associates. All rights reserved.</font> </p> <map name="library-map"> <area shape="rect" coords="1,0,85,94" href="../index.htm"><area shape="rect" coords="86,1,178,103" href="../lwp/index.htm"><area shape="rect" coords="180,0,265,103" href="../lperl/index.htm"><area shape="rect" coords="267,0,353,105" href="../perlnut/index.htm"><area shape="rect" coords="354,1,446,115" href="../prog/index.htm"><area shape="rect" coords="448,0,526,132" href="../tk/index.htm"><area shape="rect" coords="528,1,615,119" href="../cookbook/index.htm"><area shape="rect" coords="617,0,690,135" href="../pxml/index.htm"></map> </BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -