Secrand.rb

http://cvs.m17n.org/~akr/diary/d2005_02.html#a2005_02_25_1
e$B$"$?$j$N5DO@$r;W$$=P$7$^$7$?!#e(B

In article [email protected],
“NAKAMURA, Hiroshi” [email protected] writes:

rand e$B$Ne(B 4e$BJ8;z$H$$$&C;$5$K$O>!$F$J$$$C$Fe(B…

e$B$H8@$$$D$D$"$j$,$H$&$4$6$$$^$9!#e(B

e$B>!$D$3$H$O$G$-$J$$$,Aj<j$rIi$+$9$3$H$O$G$-$k!"$H9M$($k$H!"e(B
Kernel#srand e$BGQ;_$H$+$I$&$G$7$g$&$M!#e(B

e$B$$$^$9$0!"$H$$$&$o$1$8$c$J$/$F!"IaDL$N?M$,;H$C$F$$$k0BDjHGe(B
ruby e$B$Ke(B Random e$B$,F~$C$?8e$N$3$H$G$9$,!#e(B

Random#integer(max)
Ramdom#bytes(size)
Random#float

e$B$/$i$$e(B? e$BB>$K8=9Te(BAPIe$B$+$i$N0\9T@h$Ke(B;

rand e$B$h$j$be(B integer e$B$N$[$&$,%f!<%6$N0U?^$rE*3N$KI=8=$G$-$k$Ne(B
e$B$G!"e(Brand e$B$h$jC;$/!“e(Bint e$B$H$$$&$N$b$”$j$+$J!#e(B

Random#int(max_plus_one)

e$B$J$!";d$O@0?t$Ne(B range e$B$O0-$/$J$$$H;W$$$^$9!#e(B
6e$BLL%@%$%9$KBP1~$9$k$N$,e(B rand(1…6) e$B$C$FD>46E
$G$9$h$M!#e(B

e$B$"$H!"e(Bupto(0) e$B$NF0:n$OJQ$J5$$,$7$^$9!#e(B

% bin/ruby -ve ‘p Random::MT.new.upto(0)’
ruby 1.9.0 (2007-06-10 patchlevel 0) [i686-linux]
-1481029930

floate$B$OITMW$+$J$!!#e(Brand(0)e$B$HF1$8;EMM$N$D$b$j$G$9$,!"e(Brand()e$B$G$$$$$8$c$s!"e(B
e$B$H$$$&5$$,$9$k!#e(B

rand e$B$h$j$bD9$$$N$,;DG0$G$9$,!"0U?^$r$O$C$-$j$HI=8=$G$-$k$Ne(B
e$B$G;d$O9%0UE*$K;W$C$F$$$^$9!#e(B

srand()e$B$OGQ;_$H$+$^$:$$$G$9$+$Me(B? e$B$;$a$F!"e(Bsrand()e$B$O0z?t$r<h$i$J$$$h$&$K$7e(B
e$B$?$$!#e(B

Random::MT#srand e$B$O$b$H$b$H$J$$$s$G$9$h!#AG@2$i$7$$$3$H$K!#e(B

e$B@>;3OB9-$G$9!#e(B

At Tue, 12 Jun 2007 14:57:43 +0900,
NAKAMURA, Hiroshi wrote:

Kazuhiro NISHIYAMA wrote:

e$BDI2C%a%=%C%I$H$$$&$N$r8+$F;W$$=P$7$?$N$G$9$,!"e(B
rande$B$N0z?t$Ke(BRangee$B$bBP1~$7$F$[$7$$$G$9!#e(B
rand(1…10)e$B$Ge(B1e$B$+$ie(B10e$B$^$G$NHO0O$NMp?t$J$I!#e(B

e$B$I$s$J>lLL$GJXMx$G$9e(B? rand(Range.new(1.1, 3.1))e$B$H$+$G2r<a$,Yf$a$=$&$J$Ne(B
e$B$G!"%Q%9$7$?$$$H$3$m!#!Je(B2e$B$,e(B3e$B$h$jB?$/JV$j$=$&!Ke(B

e$BJXMx$H$$$&$+!"Nc$($P!“e(B1e$B$+$ie(B10e$B$^$G$NMp?t$,$[$7$$$H$-$Ke(B
rand(9)+1e$B$J$N$+e(Brand(10)+1e$B$J$N$+!”$H$$$&Iw$KG:$`$N$KBP$7$F!"e(B
rand(1…10)e$B$J$ie(B1e$B0J>ee(B10e$B0J2<$G!"e(Brand(1…10)e$B$J$ie(B1e$B0J>ee(B10e$BL$K~$He(B
e$BG:$^$J$/$F$b$$$$$+$i$G$9!#e(B

rand(Range.new(1.1,
3.1))e$B$J$ie(B1.1e$B$+$ie(B3.1e$B$N4V$Ne(BFloate$B$,e(B
e$BJV$C$F$-$F$[$7$$5$$,$7$^$9$,!"@0?t$Ne(BRangee$B$N$_$G$be(B
e$BNI$$$h$&$J5$$,$7$^$9!#e(B

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Tanaka A. wrote:

securerandom.rb e$B$N@bL@$K!Ve(Bcookie e$B$de(B nonce e$B$J$I$KE,$7$?!W$H=qe(B
e$B$-$^$7$?!#e(B

This library is a interface for secure random number generator which is
suitable for HTTP cookies, nonces, etc.

e$B:G=i$N5?Ld$O!“e(Bnonce e$B$K$D$$$F$=$N@bL@$O$”$C$F$$$k$N$+!"$H$$$&e(B
e$B$3$H$G$9!#e(B

e$B$^$:FI$s$@46$8!“e(Betc.e$B$HF~$C$F$$$k$3$H$+$i!”$=$l$[$I87L)$K=R$Y$h$&$H$7$F$$e(B
e$B$k$b$N$G$O$J$$$H$$$&0u>]$r<u$1$^$7$?!#$^$?!"!Ve(Bfor HTTP
cookiese$B!W$bF1MM$Ge(B
e$B$9!#!Ve(Bfor generating session key in HTTP
cookiese$B!W$N$[$&$,$$$$$+$be(B?
e$B87L)$5$OCV$/$H$9$l$P!"e(Bnoncee$B$K$D$$$F$b!"e(Bnoncee$B$N@[email protected]}K!$N8uJd$H$7$F5s$2$ke(B
e$B$N$KLdBj$O$J$$$H;W$$$^$9!#e(B

e$B3N$+$Ke(Bnoncee$B$re(Breplay
attacke$B$+$i<i$k$?$a$K$O!“B>$K$$$m$$$m>.5;$,MW$j$^$9e(B
e$B$,!”!Ve(Bstatelesse$B$Ke(Bnoncee$B$r@8@.$9$kJ}K!$Ne(B1e$B$D$H$7$FE,$7$F$$$k!W$O??$G$9!#e(B
e$B$3$l$KBP$7$F8=9T$Ne(Brande$B$Oe(Bseede$B$,e(Bglobale$B$Ke(B1e$B$D$7$+$J$/!"!V5/F0$9$k$?$S$KF1$8e(B
e$BCM$H$J$j!“e(Bnoncee$BMW7o$rK~$?$5$J$$>l9g$,$”$k!W$H$$$&LdBj$,$"$k!#!Ve(Bstateless
e$B$Ke(Bnoncee$B$r@8@.$9$kJ}K!$Ne(B1e$B$D!W$H$7$F!“e(BSecureRandome$B$O$3$l$h$j$O$k$+$K$h$$$3e(B
e$B$H$+$i!”%I%-%e%a%s%H$K=q$/$N$b$h$$$3$H$@$H;W$$$^$9!#e(B

e$B<!$N5?Ld$Oe(B net/imap.rb e$B$Ne(B cnonce e$B@8@.$d!"e(B
webrick/httpauth/digestauth.rb e$B$Ne(B opaque e$B@8@.$re(B
securerandom.rb e$B$r;HMQ$9$k$h$&$JJQ99$rDs0F$9$k$N$OE,@Z$J$N$+!"e(B
e$B$H$$$&$3$H$G$9!#e(B

e$B$G!“2?EY$+%a!<%k$rFI$s$G9M$($F!“e(Bnonce e$B$K$O$”$s$^$j4X78$J$$$+e(B
e$B$J$!!”$H46$8$F$$$^$9!#e(B

noncee$B@8@.$Ke(Brande$B$r;H$C$F$$$k$b$N$,$"$l$P!"e(Bsecurerandom.rbe$B$KCV$-49$($?$[$&e(B
e$B$,$h$$$H;W$$$^$9!#$G!"8+$?$H$3$m!"e(Bnet/imap.rbe$B$Oe(Bcnoncee$B@8@.$K;~9o$He(Bpide$B$re(B
e$B;H$C$F$$$k$N$GBP>]30$G$9$M!#e(B

webrick/httpauth/digestauth.rbe$B$Ne(Bopaquee$B$Oe(Bnoncee$B$8$c$J$$$G$9$,!"%;%C%7%g%se(B
e$B%-!<@8@.$@$H;W$&$N$G!"e(Bsecurerandom.rbe$B$N$[$&$,$$$$$H;W$$$^$9!#$H$$$&$he(B
e$B$j!"e(BWEBrick::Utils.random_stringe$B$N$[$&$NCV$-49$($+$J!#e(B

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)

iQEVAwUBRm9mwh9L2jg5EEGlAQIiowf9FPeUL8MOm+LSo/18Bsd6RiT3bT4tAZQs
NpINMPOZszKyM5V+VGIhU4eY12vaueP7jfJi0cLFcGRexGrflh73GaT1REwKnGyo
9idpSDdsKG0rmFdw4iAVqIK+OVS58EYnPjmyuW2Ssy0It+2gQ/kPzWM2L90n/H4r
cYsdzsZYdRC45lUl8PeK1aLAypt8Ee4iZkQGkiwK5QNjCOdWSaN0nmxVWCEWZ3g9
icXlY7Yj3PnXelXd1XC1DInZ0I7PDuKVHW/rBeU7IKAPwfjju6uYQQtnCo73dT4K
l5RfxmE/ivuJg+9YCyuyXwos+S6KHG+q4GXNPUqzCnT+n+fngNG1Yw==
=txJp
-----END PGP SIGNATURE-----

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

e$BJ]N1$7$F$?$d$D!#e(B

NAKAMURA, Hiroshi wrote:

e$B$"$H$ODI2C%a%=%C%I$r8!F$$9$k$He(B OpenSSL::Random e$B$de(B
SecureRandom e$B$+$ie(B random_bytes, hex, base64 e$B$,9M$($i$l$^$9$,!“e(B
e$B$=$&$$$&$N$,$”$k$He(B cookie e$B$K;H$$$d$9$/$J$k$N$G$`$7$m$J$$$[$&e(B
e$B$,$$$$$H$$$&5$$,$7$^$9!#e(B

e$B$3$A$i$NJV?.$OJ]N1!#e(B

cookiee$B$K!"$H$$$&$N$,!"%;%C%7%g%s%-!<@8@.$K!"$H$$$&$3$H$G$"$l$P!“3N$+$Ke(B
Random#hexe$B$de(BRandom#base64e$B$OITMQ0U$K;H$o$l$?$/$”$j$^$;$s$M!#$G$b!":#2se(B
Randome$B$r?7@_$K$h$j!"e(B

e$B!&<+J,$Ge(BRandom.newe$B$9$k?M$O!"<+J,$N@UG$$Ge(Bseede$B$r@_Dj$9$l$P$h$$!#e(B
e$B!&e(BRandom.rande$B$de(BRandom.bytese$B!"e(BRandom.hexe$B$O!"8=>u$N0z?t$J$7e(Bsrand()e$B$K$h$je(B
e$BE,@Z$Ke(Bseede$B$5$l$k!#e(B

e$B$H$J$k$N$G!";H$o$l$F$bLdBj$J$$$s$8$c$J$$$G$7$g$&$+!#e(B

e$B$H$$$&$+!"$A$c$s$H=q$$$F$^$;$s$G$7$?$,!">e5-$N$h$&$K0\9T%Q%9$r@_$1$?$$!"e(B
e$B$H;W$C$F$$$^$9!#e(B

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)

iQEVAwUBRm9pCB9L2jg5EEGlAQIEywf/TI0FPVjTdv/4l+3X+B66i9Rt63zEnlRU
NBC9XGGCLl7BwJRSrFD4s4ynwhWGtyIMTIpMG4xY551DJLMV0tbNjiSPQgNALlta
8EIJqZedtj6wfZUao3L44P3dTGDfPfSO8I1wkaIii4f88AYo6Cgh//RMjpD8VKi7
6ZqTvjGz7tPJkIm8S7Z+pgeHEgx4Z5lu+js/e0VPr+QYGShxZNGgL1GYWJ9JzCmd
uxV8q3/Q0H0oi/Rj5RZ+L+kaFXGMjJf2LHmu67uC16PD5fMxixAYrv9HJtPfoSy/
/c+LHEkYNdnEf/UNObtsrVm7wpa+QlG9Gmfd1O8Ik5dm//gDsgzlZg==
=Dd2D
-----END PGP SIGNATURE-----

In article [email protected],
“NAKAMURA, Hiroshi” [email protected] writes:

e$B$^$:FI$s$@46$8!“e(Betc.e$B$HF~$C$F$$$k$3$H$+$i!”$=$l$[$I87L)$K=R$Y$h$&$H$7$F$$e(B
e$B$k$b$N$G$O$J$$$H$$$&0u>]$r<u$1$^$7$?!#$^$?!"!Ve(Bfor HTTP cookiese$B!W$bF1MM$Ge(B
e$B$9!#!Ve(Bfor generating session key in HTTP cookiese$B!W$N$[$&$,$$$$$+$be(B?
e$B87L)$5$OCV$/$H$9$l$P!"e(Bnoncee$B$K$D$$$F$b!"e(Bnoncee$B$N@[email protected]}K!$N8uJd$H$7$F5s$2$ke(B
e$B$N$KLdBj$O$J$$$H;W$$$^$9!#e(B

e$B$=$&$$$($Pe(B session key e$B0J30$Ne(B cookie
e$B$O4X78$J$$$G$9$M!#e(B

e$B3N$+$Ke(Bnoncee$B$re(Breplay attacke$B$+$i<i$k$?$a$K$O!“B>$K$$$m$$$m>.5;$,MW$j$^$9e(B
e$B$,!”!Ve(Bstatelesse$B$Ke(Bnoncee$B$r@8@.$9$kJ}K!$Ne(B1e$B$D$H$7$FE,$7$F$$$k!W$O??$G$9!#e(B
e$B$3$l$KBP$7$F8=9T$Ne(Brande$B$Oe(Bseede$B$,e(Bglobale$B$Ke(B1e$B$D$7$+$J$/!“!V5/F0$9$k$?$S$KF1$8e(B
e$BCM$H$J$j!“e(Bnoncee$BMW7o$rK~$?$5$J$$>l9g$,$”$k!W$H$$$&LdBj$,$”$k!#!Ve(Bstateless
e$B$Ke(Bnoncee$B$r@8@.$9$kJ}K!$Ne(B1e$B$D!W$H$7$F!“e(BSecureRandome$B$O$3$l$h$j$O$k$+$K$h$$$3e(B
e$B$H$+$i!”%I%-%e%a%s%H$K=q$/$N$b$h$$$3$H$@$H;W$$$^$9!#e(B

e$B==J,$G$“$j!”%*!<%P!<$J$N$G$“$m$&!”$H46$8$F$$$^$9!#e(B

e$B%*!<%P!<$J<jCJ$r4+$a$k$N$O8m2r$r@8$_$=$&$J5$$,$9$k$N$G?($l$Je(B
e$B$$$3$H$K$7$^$7$?!#e(B

In article [email protected],
“NAKAMURA, Hiroshi” [email protected] writes:

rand e$B$h$j$be(B integer e$B$N$[$&$,%f!<%6$N0U?^$rE*3N$KI=8=$G$-$k$Ne(B
e$B$G!"e(Brand e$B$h$jC;$/!“e(Bint e$B$H$$$&$N$b$”$j$+$J!#e(B

Random#int(max_plus_one)

Random#inte$B$@$H!"$J$s$H$J$/e(B32bite$B$^$G$7$+<h$i$J$$$h$&$J5$$,$7$^$;$s$+!#$$e(B
e$B$de(B64bite$B$+$b$7$l$^$;$s$,!#e(BIntegere$B$H$NBP1~$O!"e(Bintegere$B$N$[$&$,$$$$$J$!!#e(B

e$B$b$A$m$se(B integer e$B$b$"$C$?$[$&$,$$$$$H$*$b$$$^$9!#e(B

e$B$G$b!“e(B32bit e$B$H$+e(B 64bit e$B$H$$$&$N$Oe(B Ruby
e$B$G$O4pK\E*$K4X78$”$je(B
e$B$^$;$s$+$i!"$=$&$$$&7|G0$O46$8$^$;$s!#e(B

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Tanaka A. wrote:

rand e$B$Ne(B 4e$BJ8;z$H$$$&C;$5$K$O>!$F$J$$$C$Fe(B…

e$B>!$D$3$H$O$G$-$J$$$,Aj<j$rIi$+$9$3$H$O$G$-$k!"$H9M$($k$H!"e(B
Kernel#srand e$BGQ;_$H$+$I$&$G$7$g$&$M!#e(B

e$B$$$^$9$0!"$H$$$&$o$1$8$c$J$/$F!"IaDL$N?M$,;H$C$F$$$k0BDjHGe(B
ruby e$B$Ke(B Random e$B$,F~$C$?8e$N$3$H$G$9$,!#e(B

srand()e$B$OGQ;_$H$+$^$:$$$G$9$+$Me(B? e$B$;$a$F!"e(Bsrand()e$B$O0z?t$r<h$i$J$$$h$&$K$7e(B
e$B$?$$!#e(B

Random::MT#srand e$B$O$b$H$b$H$J$$$s$G$9$h!#AG@2$i$7$$$3$H$K!#e(B

e$B$3$NJU$N0\9T$K4X$9$k5DO@$O!“G’<1$,$”$C$F$k$+$I$&$+;d$bH=CG$G$-$F$^$;$s!#e(B
e$B$H$j$"$($:e(B1.8e$B$O$*$$$H$$$Fe(B:

Random::MT#srande$B$,$J$$$H$$$&$3$H$O!"$"$=$&$+!"%3%s%9%H%i%/%?$Ge(Bseede$B$r;Xe(B
e$BDj!"$J$N$+!#$9$$$^$;$s!":#$d$C$H!"CfED$5$s%Q%C%A$r$A$c$s$H8+$^$7$?!#e(B

e$B$G!"OC$rLa$9$H!"e(Bglobale$B$J>uBV$rJQ992DG=$J!"4X?t7A<0$Ne(Bsrand(arg
!= 0)e$B$O!“e(B
1.9e$B$G$O6X;_$7$A$c$($H;W$C$F$k$s$G$9$,!”$I$&$G$7$g$&$+!#e(B

rand e$B$h$j$be(B integer e$B$N$[$&$,%f!<%6$N0U?^$rE*3N$KI=8=$G$-$k$Ne(B
e$B$G!"e(Brand e$B$h$jC;$/!“e(Bint e$B$H$$$&$N$b$”$j$+$J!#e(B

Random#int(max_plus_one)

Random#inte$B$@$H!"$J$s$H$J$/e(B32bite$B$^$G$7$+<h$i$J$$$h$&$J5$$,$7$^$;$s$+!#$$e(B
e$B$de(B64bite$B$+$b$7$l$^$;$s$,!#e(BIntegere$B$H$NBP1~$O!"e(Bintegere$B$N$[$&$,$$$$$J$!!#e(B

e$B$J$!";d$O@0?t$Ne(B range e$B$O0-$/$J$$$H;W$$$^$9!#e(B
6e$BLL%@%$%9$KBP1~$9$k$N$,e(B rand(1…6) e$B$C$FD>46E
$G$9$h$M!#e(B

e$B@>;3$5$s$b@bL@$"$j$,$H$&$4$6$$$^$9!#M}2r$7$^$7$?!#$5$-$[$Ie(Bruby-coree$B$KEje(B
e$B$2$?8=>u0F%5%^%j!J0J2<$K$b0zMQ$7$^$9!K$G$O!"e(BIntegere$B$N$e(BOKe$B$H$$$&$3$H$K$7e(B
e$B$F$
$^$7$?!#$I$&$G$7$g$&!#e(B

Random#integer(max_plus_one_or_range)
Ramdom#bytes(size)
Random#float # same as Random#rand(0)
Random#rand(max_plus_one_or_range = 0)
# only allows range with Integer begin/last
# ArgumentError otherwise
Random#srand(seed = nil)
Random#random_seed # same as Random#srand(0)
Random#seed=(seed = nil) # same as Random#srand(seed)
Random#seed # returns the most recently used seed

Random.rand(arg = 0) # calls Random#rand(arg) of the singleton
# Random object which is initialized with
# the current srand()

rand(arg = 0) # calls Random.rand(arg)
srand() # srand() now takes no argument for 1.9

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)

iQEVAwUBRnNHyR9L2jg5EEGlAQL+9gf8DvrC3cr36BXKuRnJzC1/TLAaKqITh1sM
MzSW3AIi6oXxNm+4MRklaF+fkuFJm17UfvHiq2S7r2Ce+jTsxd/HqsZDRlzeRchI
xtp/hc8MkhUsJjHeR3xKaODdcS+Nkf+L0EjLGFNG6Py3G3T6CYGjlkjdG+J3pKg4
mma+AlwcHznNUctVWVJ/GczJ40Y028K6mxLKScDAZgVCDqXoUFgj3sfCuJMT1QJN
LafjFIiBxyssoAVnu/iGfIA22mXfST4p16VjtxowS2/pEMU9BMZ8KIH4fMmZPc8s
kjJ5jJ3vB5xLIX3/uDOfg8CwoQ5Vpblnhm4az9QFZbgfxMcD4CSSTA==
=FpSB
-----END PGP SIGNATURE-----

In article [email protected],
“NAKAMURA, Hiroshi” [email protected] writes:

[ruby-dev:30950]e$B$NCfED$5$s$N$r%Y!<%9$K!"<BAu$7$^$7$?!#e(BMTe$BItJ,$OA4$FCfEDe(B
patche$B$N$^$^$G!"e(BRuby wrappere$BItJ,$@$1$NJQ99$G$9!#e(B

e$B<o$r@8@.$9$ke(B Random.seed e$B$O$$$$%“%$%G%”$@$H;W$C$F$$$?$N$G$9e(B
e$B$,!">C$($F$7$^$C$F;DG0$G$9!#e(B

Random.new.integer(0) e$B$O$"$$$+$o$i$:2x$7$$$h$&$G$9!#e(B
e$B$*$=$i$/!"e(BArgumentError e$B$,E,@Z$G$7$g$&!#e(B

% ./ruby -e ‘p Random.new.integer(0)’
1863464992

e$B$^$?!"e(BRandom#integer e$B$,0z?t$H$7$F@0?t$H$=$Ne(B range
e$B0J30$r<u$1e(B
e$BIU$1$k$N$O$J$s$+JQ$J5$$,$7$^$9!#e(B

% ./ruby -e ‘p Random.new.integer(2.3)’
1
./ruby -e ‘p Random.new.integer(“0”)’
0.00358331439046145

random_bytes e$B$Ge(B len e$B$,e(B 4 e$B$NG?t$N;~$K$O0l2sL5BL$Ke(B
genrand_int32_0 e$B$r8F$s$G$k$s$8$c$J$$$G$7$g$&$+!#e(B

e$B%F%9%H$r$A$g$C$HD/$a$?$s$G$9$,!"e(Btest_ctor e$B$Ne(B ctor
e$B$C$F$J$s$Ge(B
e$B$9$+e(B?

ILP32 e$B%^%7%s$Ge(B Random e$B%*%V%8%'%/%H$re(B marshal
e$B$7$F!"e(BLP64 e$B%^%7e(B
e$B%s$Ge(B unmarshal e$B$9$k$H!"0J9_$KH/@8$9$kMp?tNs$,0c$$$^$9!#e(B

ilp32% ./ruby -e ‘r = Random.new(10); open(“z”, “w”) {|f|
Marshal.dump(r, f) }; p r.rand’
0.771320643266746
ilp32% scp z.rm lp64:

lp64% ./ruby -e ‘r = Marshal.load(ARGF); p r.rand’ ~/z.rm
0.921905138015851

unsinged long e$B$Je(B seed e$B$Ke(B VALUE e$B$rF~$l$F$$$^$9$,!“e(BLLP64
e$B$r%5e(B
e$B%]!<%H$9$k$3$H$K$J$C$?:r:#$K$*$$$F$O=$@5$NI,MW$,$”$k$N$G$O$Je(B
e$B$$$G$7$g$&$+!#e(B

Random#inte$B$O<BAu$7$F$^$;$s$,!"$3$l$OC1$KK:$l$?$@$1$G$9!#$I$&$7$^$7$g!#e(B

e$B;d$O!“$”$k$H$$$$$J!"$H;W$$$^$9!#e(B

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

NAKAMURA, Hiroshi wrote:

e$B@>;3$5$s$b@bL@$"$j$,$H$&$4$6$$$^$9!#M}2r$7$^$7$?!#$5$-$[$Ie(Bruby-coree$B$KEje(B
e$B$2$?8=>u0F%5%^%j!J0J2<$K$b0zMQ$7$^$9!K$G$O!"e(BIntegere$B$N$e(BOKe$B$H$$$&$3$H$K$7e(B
e$B$F$
$^$7$?!#$I$&$G$7$g$&!#e(B

[ruby-dev:30950]e$B$NCfED$5$s$N$r%Y!<%9$K!"<BAu$7$^$7$?!#e(BMTe$BItJ,$OA4$FCfEDe(B
patche$B$N$^$^$G!"e(BRuby wrappere$BItJ,$@$1$NJQ99$G$9!#e(B

http://dev.ctor.org/download/random.tar.gz
5ed438b409360e216bc44e83d08fd8278ab76461 random.tar.gz

Random#integer(max_plus_one_or_range)
Ramdom#bytes(size)
Random#float # same as Random#rand(0)
Random#rand(max_plus_one_or_range = 0)
# only allows range with Integer begin/last
# ArgumentError otherwise
Random#srand(seed = nil)

Random#srande$B$O!“$J$7$K$7$^$7$?!#=i4|2=$Oe(BRandom.new(seed)e$B$G$N$_9T$$!”:F=ie(B
e$B4|2=$OIT2D!#e(B

Random#random_seed # same as Random#srand(0)
Random#seed=(seed = nil) # same as Random#srand(seed)

e$B$3$Ne(B2e$B$D$b!“F1$8M}M3$G!”$J$7!#e(B

Random#seed # returns the most recently used seed

Random.rand(arg = 0) # calls Random#rand(arg) of the singleton
# Random object which is initialized with
# the current srand()

rand(arg = 0) # calls Random.rand(arg)
srand() # srand() now takes no argument for 1.9

srande$B$O<BAu$7$F$$$^$;$s!#GQ;_!“$O!”$d$j$9$.e(B?

Random#inte$B$O<BAu$7$F$^$;$s$,!"$3$l$OC1$KK:$l$?$@$1$G$9!#$I$&$7$^$7$g!#e(B

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)

iQEVAwUBRpJT6B9L2jg5EEGlAQJldwf/XIGwRU3gJvM59esD6A9nzcqW9lC3BIY2
GFOibsmrfv+Q4Xt1OCvfBaUkcZ6Id4s6ARRPBHBvcsAOi4Q6mfn2J4LwuXGTjIkZ
DkjvQ1aGpnvER37h8Oe3vFmnTC2JldRU+R8pfYM29+u05Y40WJCJVwJUfQwvgm1M
QnY7011wRrFK3FyNNsO6a5YT2DFvdEd8XRnF3G0ujmYSh32WgZuVTqHOCp4SzlUA
qPnr3IsUuJ8g4Rc8gpk8joI3/ylN9zEP0ZAlTl55DLUcM7OjvnfWbriq5KYL+DBh
+jTs3Szyc6kA1pzb2qDkqFj8u2iqIJ3/Pc7nTlQrCF4FO4sRhsDD9Q==
=NuYI
-----END PGP SIGNATURE-----

In article [email protected],
“NAKAMURA, Hiroshi” [email protected] writes:

e$B<o$r@8@.$9$ke(B Random.seed e$B$O$$$$%“%$%G%”$@$H;W$C$F$$$?$N$G$9e(B
e$B$,!">C$($F$7$^$C$F;DG0$G$9!#e(B

e$B$J$s$+4*0c$$$7$F$$$?$h$&$G$9!Je(BRandom#seede$B$H:.F1$7$?!K!#F~$l$^$7$g$&!#e(B
e$B$,!"$I$3$K;H$&$N$+$Je(B? Random#seed= e$B$bI,MWe(B?

e$BA[DjMQES$O!“B>$Ne(B PRNG e$B$G$9!#<o$O2?$+$H<A$N0-$$$N$r;H$$$,$A$Je(B
e$B$N$G!”;H$$$d$9$$$H$3$m$K$A$g$C$H$O$^$7$J$b$N$r$$$$F$$-$?$$e(B
e$B$H$$$&$/$i$$$N5$J,$G$9!#e(B

Random#seed= e$B$O$$$i$J$$$H;W$$$^$9!#e(B

random_bytes e$B$Ge(B len e$B$,e(B 4 e$B$NG?t$N;~$K$O0l2sL5BL$Ke(B
genrand_int32_0 e$B$r8F$s$G$k$s$8$c$J$$$G$7$g$&$+!#e(B

e$B$O$$!#$=$N$/$i$$$$$$$8$c$s!#!#!#$H;W$C$?$s$G$9$,!"7ONs9M$($k$HL5BL$K>CHqe(B
e$B$7$A$cBLL$+!#%A%'%C%/$7$^$9!#e(B

e$BBLL$C$FDx$8$c$J$$$G$9$,!"$^$!!"MF0W$JHO0O$G!#e(B
e$B$=$l$K!"e(BRandom#bytes e$B$OL5BL$J>CHq$,$o$+$j$d$9$$$G$9$7!#e(B

e$B$^$F$h!“$b$7$+$7$F!“6-3&9g$o$;$GM>$C$?>l9g!”<!$Ne(BRandom#bytese$B$N@hF,$K$”$Ue(B
e$B$l$5$;$kI,MW$C$F$"$ke(B? prng.bytes(5); prng.float; prng.bytes(3)e$B$N>l9g$Oe(B?

e$B$=$N$X$s$OMF0W$JHO0O$+$i$$$/$i$+30$l$F$k$s$8$c$J$$$G$9$+$M!#e(B
53bit e$B>CHq$H$+!"$H$/$K!#e(B

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

e$BEDCf$5$s!">:Y$K$"$j$,$H$&$4$6$$$^$9!#e(B

e$B$H$3$m$G$^$D$b$H$5$s!"$3$l!"e(B1.9e$B$KF~$l$k$D$b$j$G$d$C$F$k$s$G$9$,!“e(B
e$B$^$@$=$NA0Ds$G$$$$$G$9$+e(B?
e$BNc$($P!Ve(Bsrande$BGQ;_$9$k$h$&$J$N$OF~$l$J$$!W$H$+e(B
e$B$”$l$PJ}8~=$@5$9$k$N$G!"Aa$a$K65$($F$/$@$5$$!#e(B

Tanaka A. wrote:

[ruby-dev:30950]e$B$NCfED$5$s$N$r%Y!<%9$K!"<BAu$7$^$7$?!#e(BMTe$BItJ,$OA4$FCfEDe(B
patche$B$N$^$^$G!"e(BRuby wrappere$BItJ,$@$1$NJQ99$G$9!#e(B

e$B<o$r@8@.$9$ke(B Random.seed e$B$O$$$$%"%$%G%"$@$H;W$C$F$$$?$N$G$9e(B
e$B$,!">C$($F$7$^$C$F;DG0$G$9!#e(B

e$B$J$s$+4*0c$$$7$F$$$?$h$&$G$9!Je(BRandom#seede$B$H:.F1$7$?!K!#F~$l$^$7$g$&!#e(B
e$B$,!"$I$3$K;H$&$N$+$Je(B? Random#seed= e$B$bI,MWe(B?

Random.new.integer(0) e$B$O$"$$$+$o$i$:2x$7$$$h$&$G$9!#e(B
e$B$*$=$i$/!"e(BArgumentError e$B$,E,@Z$G$7$g$&!#e(B

% ./ruby -e ‘p Random.new.integer(0)’
1863464992

e$B8f0U!#e(B

e$B$^$?!"e(BRandom#integer e$B$,0z?t$H$7$F@0?t$H$=$Ne(B range e$B0J30$r<u$1e(B
e$BIU$1$k$N$O$J$s$+JQ$J5$$,$7$^$9!#e(B

% ./ruby -e ‘p Random.new.integer(2.3)’
1
./ruby -e ‘p Random.new.integer(“0”)’
0.00358331439046145

e$BC1=c$Ke(BRandom#rande$B$KEj$2$?$s$8$cBLL$C$]$$$G$9$M!#e(B
Random#integer(0)e$B$H9g$o$;$F$A$g$C$H9M$($^$9!#e(B

random_bytes e$B$Ge(B len e$B$,e(B 4 e$B$NG?t$N;~$K$O0l2sL5BL$Ke(B
genrand_int32_0 e$B$r8F$s$G$k$s$8$c$J$$$G$7$g$&$+!#e(B

e$B$O$$!#$=$N$/$i$$$$$$$8$c$s!#!#!#$H;W$C$?$s$G$9$,!"7ONs9M$($k$HL5BL$K>CHqe(B
e$B$7$A$cBLL$+!#%A%’%C%/$7$^$9!#e(B

e$B$^$F$h!"$b$7$+$7$F!“6-3&9g$o$;$GM>$C$?>l9g!”<!$Ne(BRandom#bytese$B$N@hF,$K$"$Ue(B
e$B$l$5$;$kI,MW$C$F$"$ke(B? prng.bytes(5); prng.float;
prng.bytes(3)e$B$N>l9g$Oe(B?

e$B%F%9%H$r$A$g$C$HD/$a$?$s$G$9$,!"e(Btest_ctor e$B$Ne(B ctor e$B$C$F$J$s$Ge(B
e$B$9$+e(B?

constructore$B$NN,$G$9!#e(B

ILP32 e$B%^%7%s$Ge(B Random e$B%*%V%8%’%/%H$re(B marshal e$B$7$F!"e(BLP64 e$B%^%7e(B
e$B%s$Ge(B unmarshal e$B$9$k$H!"0J9_$KH/@8$9$kMp?tNs$,0c$$$^$9!#e(B

ilp32% ./ruby -e ‘r = Random.new(10); open(“z”, “w”) {|f|
Marshal.dump(r, f) }; p r.rand’
0.771320643266746
ilp32% scp z.rm lp64:

lp64% ./ruby -e ‘r = Marshal.load(ARGF); p r.rand’ ~/z.rm
0.921905138015851

e$BCfED$5!<$s!#e(B

unsinged long e$B$Je(B seed e$B$Ke(B VALUE e$B$rF~$l$F$$$^$9$,!“e(BLLP64 e$B$r%5e(B
e$B%]!<%H$9$k$3$H$K$J$C$?:r:#$K$*$$$F$O=$@5$NI,MW$,$”$k$N$G$O$Je(B
e$B$$$G$7$g$&$+!#e(B

e$BCfED$5!<$s!#e(B

e$B$H6+$s$G$*$1$P$J$s$H$+$7$F$/$l$k$K0c$$$J$$!#e(B

Random#inte$B$O<BAu$7$F$^$;$s$,!"$3$l$OC1$KK:$l$?$@$1$G$9!#$I$&$7$^$7$g!#e(B

e$B;d$O!"$"$k$H$$$$$J!"$H;W$$$^$9!#e(B

e$B>e5-$$$m$$$m$r<BAu$9$k$&$A$KH?BP$,$J$1$l$P!"F~$l$^$9!#e(B
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)

iQEVAwUBRpLysh9L2jg5EEGlAQKTGgf/Yf44ADXJM2DQDulG5FiHqVocRUkM//o1
swr39Te3rHfIfqUPMxSieS7s2mYlWrh9LmN5kJgA7ybYejXPrWhlnfNoxnUQMsJF
7810l/GLhof0APw+DLwo7pee0s1Iz4D5KdDVSmcmpNY5disKqeNforJViQZA13Y8
OMpRZo1IziGBYdstCp3DdgLUU3u9MQHcx0EckqIoTIwFlXCY+KM3wQok/mEeZSTJ
O7VzvPuULetAtrsuFSmGdY176OvZETZq7GWhYNFeCYXOLL1gd/2Z8eK/tcp+DTfB
zppoVktQX4X2wp59JmVUyl11SDObAxv34DUTGxn3l64Zo5UGDy6EYQ==
=5U6E
-----END PGP SIGNATURE-----

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

NAKAMURA, Hiroshi wrote:

e$BEDCf$5$s!“>:Y$K$”$j$,$H$&$4$6$$$^$9!#e(B

e$B$H$3$m$G$^$D$b$H$5$s!"$3$l!"e(B1.9e$B$KF~$l$k$D$b$j$G$d$C$F$k$s$G$9$,!“e(B
e$B$^$@$=$NA0Ds$G$$$$$G$9$+e(B? e$BNc$($P!Ve(Bsrande$BGQ;_$9$k$h$&$J$N$OF~$l$J$$!W$H$+e(B
e$B$”$l$PJ}8~=$@5$9$k$N$G!"Aa$a$K65$($F$/$@$5$$!#e(B

e$B=$@5$7$^$7$?!#e(B

http://dev.ctor.org/download/random_20070711.tar.gz
88aaac844b37bde6494ce6ed1dbf1339f8cbb468 random_20070711.tar.gz

  1. RDoce$B%3%a%s%H$r=q$$$?!#e(Brdoce$B$K$ODL$7$F$J$$$1$I!#e(B
  2. Random.seede$B$rDI2C$7$?!#e(B[ruby-dev:31173]e$B!#e(B

Random#bytese$B$GL5BL$Ke(Bgenrand_int32_0e$B$r8F$P$J$$$h$&$K$7$?!#e(B
[ruby-dev:31173]e$B!#e(B
4.
Random#integere$B$Ke(B0e$B$^$?$OIi$N@0?t$rEO$7$?$ie(BArgumentErrore$B!#e(B
Random#rande$B$O0JA0$N$^$^!#e(B[ruby-dev:31173]e$B!&A!#e(B
5. Random#inte$BDI2C!#e(B[ruby-dev:31173]e$B!#e(B
6.
Random#integere$B$He(BRandom#rande$B$O!"e(Brangee$B$Ne(Bbegin/ende$B$KHs@0?tF~$l$F8F$V$He(B
ArgumentErrore$B!#ET9g>e!#e(B

e$B;D$j$O$3$l"-!#e(B

e$BCfED$5!<$s!#e(B

unsinged long e$B$Je(B seed e$B$Ke(B VALUE e$B$rF~$l$F$$$^$9$,!“e(BLLP64 e$B$r%5e(B
e$B%]!<%H$9$k$3$H$K$J$C$?:r:#$K$*$$$F$O=$@5$NI,MW$,$”$k$N$G$O$Je(B
e$B$$$G$7$g$&$+!#e(B

e$BCfED$5!<$s!#e(B

e$B$I$&$7$h!#e(B

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)

iQEVAwUBRpQzix9L2jg5EEGlAQLwKAf+PzL2wwLr+p3ohKlKkmPqgX/VSeVzyoR7
Ff1lHEWoH2z+WzgmXENcafRj3uYuoTI58ECKHz4gfMTaw7YQp03qNMHmkCUHHhin
ONSdp4oTYzVbRp59LuY6J7qGe876/vTKDhmCEBs9aREB9cWMS1o1kfRRRcIjxXyr
YvhzhZvoVwFcqJ+fXc8EsCQowLXD7DwussIe762Xi8Z30Ef0QN2wOzy8TZaL/X9I
/8uwCzpNrZkZsxt8RHn0vng60oxLB2x1W28iZPep0drWz1h4A11ZZdPxLEfDMGLc
E6Q0kW4M7CTVD15eVv2Z20WYzCGrEFJNKLZ5wSPFhSJaOt+Qc5TwFg==
=0BeL
-----END PGP SIGNATURE-----

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:31178] Re: Random”
on Jul.11,2007 10:34:37, [email protected] wrote:
| >> unsinged long e$B$Je(B seed e$B$Ke(B VALUE e$B$rF~$l$F$$$^$9$,!“e(BLLP64 e$B$r%5e(B
| >> e$B%]!<%H$9$k$3$H$K$J$C$?:r:#$K$*$$$F$O=$@5$NI,MW$,$”$k$N$G$O$Je(B
| >> e$B$$$G$7$g$&$+!#e(B
| >
| > e$BCfED$5!<$s!#e(B
|
| e$B$I$&$7$h!#e(B

e$B$J$+$@$5$s$8$c$J$/$F62=L$J$s$G$9$,!"AGD>$Ke(Bseede$B$re(BVALUEe$B$K$7$F$_e(B
e$B$^$7$?!#e(B

http://www.rubyist.net/~usa/tmp/random.c.from_trunk_2.diff

e$B%Q%C%A$N%Q%C%A!"$G$O$J$/$F!“AG$Ne(Btrunke$B$+$i$N%Q%C%A$G$9!#e(B
e$B$”$H!“e(Btest_random.rbe$B$Ge(Bfailuree$B$,=P$F$?$N$Ge(Brandom_bytes()e$B$K0z?te(B
lene$B$N7?%A%'%C%/$rF~$l$F$”$j$^$9!#e(B

e$B$=$l$G$O!#e(B

In article [email protected],
“NAKAMURA, Hiroshi” [email protected] writes:

  1. RDoce$B%3%a%s%H$r=q$$$?!#e(Brdoce$B$K$ODL$7$F$J$$$1$I!#e(B

Ruby currently uses a modified Mersenne Twister with a
period of 2**19937-1.

e$B$H!“$”$j$^$9$,!"e(BMersenne Twister e$B$r$I$&e(B modify
e$B$7$F$^$7$?$Ce(B
e$B$1e(B?

e$B$"$H!“e(BRandom.new e$B$N$H$3$m$G!“0z?t$Ne(B 0 e$B$Ge(B Random.seed
e$B$r;H$&e(B
e$B$H$”$j$^$9$,!”<BAu$O<o$,e(B 0 e$B$K$J$j$^$9!#<BAu$N$[$&$,AGD>$J5se(B
e$BF0$G$h$$$H;W$$$^$9!#e(B

  1. Random.seede$B$rDI2C$7$?!#e(B[ruby-dev:31173]e$B!#e(B

e$B$"$j$,$H$&$4$6$$$^$9!#e(B

  1. Random#bytese$B$GL5BL$Ke(Bgenrand_int32_0e$B$r8F$P$J$$$h$&$K$7$?!#e(B
    [ruby-dev:31173]e$B!#e(B

e$B0z?t$KHsIi@0?t0J30$r<u$1IU$1$k$h$&$G$9!#e(B

% ./miniruby -e ‘p Random.new.bytes(nil)’
“\302&”

e$B$^$?!"F1$8Ns$+$i<h$j=P$7$F$$$k5$$,$7$J$$7k2L$,=P$F$-$^$9!#e(B

% ./miniruby -e ‘10.times {|i| p Random.new(10).bytes(i) }’
“”
“\t”
“\tE”
“\tEu”
“\tEu\305”
“Eu\305}\234”
“Eu\305}\234{”
“Eu\305}\234{L”
“Eu\305\234{L\344\377”
“Eu\305\234{L\344\377O”

  1. Random#integere$B$Ke(B0e$B$^$?$OIi$N@0?t$rEO$7$?$ie(BArgumentErrore$B!#e(B

Bignum e$B$Ne(B 0 e$B$rEO$7$?>l9g$K$=$&$J$j$^$;$s!#e(B

% ./miniruby -e ’
big_zero = 0x40000000.coerce(0)[0]
p big_zero
p Random.new(10).integer(big_zero)’
0
-982170359

  1. Random#inte$BDI2C!#e(B[ruby-dev:31173]e$B!#e(B

e$B$"$j$,$H$&$4$6$$$^$9!#e(B

  1. Random#integere$B$He(BRandom#rande$B$O!"e(Brangee$B$Ne(Bbegin/ende$B$KHs@0?tF~$l$F8F$V$He(B
    ArgumentErrore$B!#ET9g>e!#e(B

e$BET9g>e$H$$$&$h$j$O!“$`$7$m$=$C$A$N$[$&$,$$$$$s$8$c$J$$$+$H;We(B
e$B$$$^$9!#?7@_$9$k$H$3$m$O8_49@-$NLdBj$b$”$j$^$;$s$7!#e(B

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:31180] Re: Random”
on Jul.11,2007 14:42:46, [email protected] wrote:
| e$B$J$+$@$5$s$8$c$J$/$F62=L$J$s$G$9$,!"AGD>$Ke(Bseede$B$re(BVALUEe$B$K$7$F$_e(B
| e$B$^$7$?!#e(B
|
| http://www.rubyist.net/~usa/tmp/random.c.from_trunk_2.diff

e$B$D$$$G$Ke(B[ruby-dev:31179]e$B$G;XE&$5$l$F$$$kLdBj$bD>$7$F$_$^$7$?!#e(B
e$B%F%9%H$D$-%U%k%;%C%He(B(e$B$?$@$7e(Btrunke$B$N$_e(B)e$B!#e(B

http://www.rubyist.net/~usa/tmp/random_usa.tar.gz
1e932c6ec242b1e4f3205776c3449acb70bcfd71 random_usa.tar.gz

e$B$=$l$G$O!#e(B

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:31183] Re: Random”
on Jul.11,2007 23:18:40, [email protected] wrote:
| 5. 64bite$BBP1~!Je(Bby e$B$&$5$5$s!Ke(B

e$B<B$OO3$l$,$"$C$F!“e(Binit_genrande$BKAF,IU6a$Ne(B
mt->seed = s;
e$B$re(B
mt->seed = ULONG2NUM(s);
e$B$H$9$kI,MW$,$”$j$^$9!#$9$_$^$;$se(B orz

e$B$=$l$G$O!#e(B

In article [email protected],
“NAKAMURA, Hiroshi” [email protected] writes:

e$B$h$/$o$+$j$^$;$s!#e(Bmt19937e$BItJ,$Oe(Br2654e$B$N$^$D$b$H$5$s$N%3%_%C%H$+$iJQ$o$C$Fe(B
e$B$J$$$h$&$@$7!"e(Br5340e$B$Ne(Bdavee$B!J9ue(B?e$B!K$,>e5-%3%a%s%H$r=q$$$?;~E@$G$O!"e(B
e$B!Ve(Bmodifiede$B!W$H$O8@$($J$$$h$&$J5$$,$7$^$9!#e(Bmt19937are$B$N$3$H$r8@$&$D$b$j$Ge(B
e$B!Ve(Bmodifiede$B!W$H=q$$$?$N$+$J$!!#e(B

./miniruby -e ‘r = Random.new(0x00000456000003450000023400000123)
1000.times { p r.int(0x100000000) }
1000.times { printf “%10.8f\n”, r.int(0x100000000)*(1.0/4294967296.0) }’

e$B$H$9$k$He(B mt19937ar.out e$B$HF1$87k2L$,F@$i$l$^$9$7!“%”%k%4%j%:e(B
e$B%`$OJQ$o$C$F$J$$$H;W$&$s$G$9$h$M$'!#e(B

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/mt19937ar.html

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

e$B:FEY=$@5$7$^$7$?!#$&$5$5$s=$@5$b%^!<%8$7$F$“$j$^$9!#e(B
e$B$&$5$5$s!”$I$&$b$"$j$,$H$&$4$6$$$^$7$?!#e(B

http://dev.ctor.org/download/random_20070711_2.tar.gz
14c45c5d06587ce92aad4485f621a5cb856262bb random_20070711_2.tar.gz

e$B=$@5E@$G$9!#e(B

Random.newe$B$N0z?te(B0e$B$G$N5sF0$K4X$9$k%3%a%s%H$r=$@5!J$3$l$be(Bdavee$B!Ke(B
2. Random#bytese$B$K@0?t0J30$rEO$7$?$i%(%i!<!J=$@5e(B by
e$B$&$5$5$s!Ke(B
3.
Random#bytese$B$,JV$9%P%$%HNs$N:n$jJ}$K%P%0$,$"$j!"7ONs$N0lIt$rL5BL$Ke(B
e$B<N$F$F$$$?!J=$@5e(B by e$B$&$5$5$s!Ke(B
4.
Random#integere$B$Ke(BBignume$B$Ne(B0e$B$rEO$7$F$b%(%i!<$K$J$i$J$+$C$?e(B
e$B!J=$@5e(B by e$B$&$5$5$s!Ke(B
5. 64bite$BBP1~!Je(Bby e$B$&$5$5$s!Ke(B
6.
Random.newe$B$Ke(Bnile$B$rEO$7$?;~$N%(%i!<$r!"e(BTypeErrore$B$+$ie(BArgumentErrore$B$K!#e(B
7.
Random#rande$B$Ke(BBignume$B$Ne(B0e$B$rEO$7$?;~!"e(BFixnume$B$Ne(B0e$B$N;~$HF1$85sF0$K!#e(B

e$B;D$k$O"-$H!“L50z?te(Bsrande$B$r$b$7$+$7$?$iI|3h!”$/$i$$!#e(B

Tanaka A. wrote:

  1. RDoce$B%3%a%s%H$r=q$$$?!#e(Brdoce$B$K$ODL$7$F$J$$$1$I!#e(B

Ruby currently uses a modified Mersenne Twister with a
period of 2**19937-1.

e$B$H!“$”$j$^$9$,!"e(BMersenne Twister e$B$r$I$&e(B modify e$B$7$F$^$7$?$Ce(B
e$B$1e(B?

e$B$h$/$o$+$j$^$;$s!#e(Bmt19937e$BItJ,$Oe(Br2654e$B$N$^$D$b$H$5$s$N%3%_%C%H$+$iJQ$o$C$Fe(B
e$B$J$$$h$&$@$7!"e(Br5340e$B$Ne(Bdavee$B!J9ue(B?e$B!K$,>e5-%3%a%s%H$r=q$$$?;~E@$G$O!"e(B
e$B!Ve(Bmodifiede$B!W$H$O8@$($J$$$h$&$J5$$,$7$^$9!#e(Bmt19937are$B$N$3$H$r8@$&$D$b$j$Ge(B
e$B!Ve(Bmodifiede$B!W$H=q$$$?$N$+$J$!!#e(B

e$B$H$j$"$($:!Ve(Bmodifiede$B!W$r>C$=$&$+$Je(B?
e$BC/$+0c$&G’<1$N?M$O$$$^$;$s$+!#e(B

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)

iQEVAwUBRpTmpR9L2jg5EEGlAQL4cQf+NplJg6yxBxs3LjOgp+I2Ca+V69zGaU6e
x+SSf9dlOaxgtfCyLwO6+OQJsw4N5HoO+YGvLzYxG1WFcT01tB8ihfUviiR1o9O2
5ldAld2F7wBq7u+Fawr8CJnx416vg4FWqe8QGYZR3aFMIYvLuFt1kevu/FadcNWN
b25gvGrAsff9kdEsqTYmgHqcr4WzIYKI8C2cR0zubmfnrTb09XYT3eClnOwlYySW
vtHuMHoawbj9gwV2/YojJXkr+n6fOPD/nKFyfuE4YaCRMkYf6joQDRsDg+xSDqux
+b+DJdexQtICIUgckuLAg6WemP6MleTpoaBM9kgxARVwAhgryBPOAg==
=9zqe
-----END PGP SIGNATURE-----

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:31184] Re: Random”
on Jul.11,2007 23:34:14, [email protected] wrote:
| | 5. 64bite$BBP1~!Je(Bby e$B$&$5$5$s!Ke(B
|
| e$B<B$OO3$l$,$"$C$F!“e(Binit_genrande$BKAF,IU6a$Ne(B
| mt->seed = s;
| e$B$re(B
| mt->seed = ULONG2NUM(s);
| e$B$H$9$kI,MW$,$”$j$^$9!#$9$_$^$;$se(B orz

e$B$3$l$rF~$l$F!"e(BLLP64e$B$J4D6-$G;n$7$?$H$3$m!"e(Btest_random.rbe$B$,A4Ite(B
e$BDL$k$3$H$,3NG’$G$-$^$7$?!#e(B

e$B$H$$$&$+!"$=$N2aDx$Ge(BLLP64e$B$Je(Brubye$B<+BN$N%P%0$r8+$D$1$FD>$7$^$7e(B

e$B$?e(B…

e$B$=$l$G$O!#e(B