池田孝志です。
srandがunsigned intの範囲でしか値が取れませんでした。
% ruby -e 'srand(2**32)'
/tmp/rba23377:1:in `srand': bignum too big to convert into `uint' (ArgumentError)
やはり、NUM2UINTを呼び出すだけなのは仕様なのでしょうか。
今のところ、
uint_ceil = 2**([0].pack("I").size * 8)
while seed >= uint_ceil
seed = (seed % uint_ceil) + (seed / uint_ceil)
end
srand(seed)
としてしのいでいるまでです。
今思ったのですが、srandに負の数を与えてはいけませんか?
それと、
irb(main):001:0> srand(2**32-1)
0
irb(main):002:0> srand(2**32-1)
-1
と、種を保存する型がintです。
あと、[ruby-dev:2492]は推奨、というだけに終っているのでしょ
うか。便利だとは思いますが、使うまでには至っていないので…
--
池田 孝志 cercine / kcn.ne.jp