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

田中さん、詳細にありがとうございます。

ところでまつもとさん、これ、1.9に入れるつもりでやってるんですが、
まだその前提でいいですか? 例えば「srand廃止するようなのは入れない」とか
あれば方向修正するので、早めに教えてください。

Tanaka Akira wrote:
>> [ruby-dev:30950]の中田さんのをベースに、実装しました。MT部分は全て中田
>> patchのままで、Ruby wrapper部分だけの変更です。
> 
> 種を生成する Random.seed はいいアイデアだと思っていたのです
> が、消えてしまって残念です。

なんか勘違いしていたようです(Random#seedと混同した)。入れましょう。
が、どこに使うのかな? Random#seed= も必要?

> Random.new.integer(0) はあいかわらず怪しいようです。
> おそらく、ArgumentError が適切でしょう。
> 
> % ./ruby -e 'p Random.new.integer(0)' 
> 1863464992

御意。

> また、Random#integer が引数として整数とその range 以外を受け
> 付けるのはなんか変な気がします。
> 
> % ./ruby -e 'p Random.new.integer(2.3)'
> 1
> ./ruby -e 'p Random.new.integer("0")'
> 0.00358331439046145

単純にRandom#randに投げたんじゃ駄目っぽいですね。
Random#integer(0)と合わせてちょっと考えます。

> random_bytes で len が 4 の倍数の時には一回無駄に
> genrand_int32_0 を呼んでるんじゃないでしょうか。

はい。そのくらいいいじゃん。。。と思ったんですが、系列考えると無駄に消費
しちゃ駄目か。チェックします。

まてよ、もしかして、境界合わせで余った場合、次のRandom#bytesの先頭にあふ
れさせる必要ってある? prng.bytes(5); prng.float; prng.bytes(3)の場合は?

> テストをちょっと眺めたんですが、test_ctor の ctor ってなんで
> すか?

constructorの略です。

> ILP32 マシンで Random オブジェクトを marshal して、LP64 マシ
> ンで unmarshal すると、以降に発生する乱数列が違います。
> 
> 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 な seed に VALUE を入れていますが、LLP64 をサ
> ポートすることになった昨今においては修正の必要があるのではな
> いでしょうか。

中田さーん。

# と叫んでおけばなんとかしてくれるに違いない。

>> Random#intは実装してませんが、これは単に忘れただけです。どうしましょ。
> 
> 私は、あるといいな、と思います。

上記いろいろを実装するうちに反対がなければ、入れます。
-----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-----