まつもと ゆきひろです

In message "[ruby-list:18003] 大きすぎる種"
    on 99/10/27, Takashi Ikeda <cercine / kcn.ne.jp> writes:

|srandがunsigned intの範囲でしか値が取れませんでした。
|
|% ruby -e 'srand(2**32)'
|/tmp/rba23377:1:in `srand': bignum too big to convert into `uint' (ArgumentError)
|
|やはり、NUM2UINTを呼び出すだけなのは仕様なのでしょうか。

現状では仕様です。理由は簡単で、私がどのような仕様が現状以上
に適切なのか知らないからです。乱数などについての十分な知識が
無いことは自覚していますので。

srandの適切な振る舞いについて議論が行われ、その振る舞いが
srandの新しい仕様となることは歓迎です。議論は ruby-dev でや
りましょうね。

|あと、[ruby-dev:2492]は推奨、というだけに終っているのでしょ
|うか。便利だとは思いますが、使うまでには至っていないので…

あれはsrandの実装に関する提案だったと思うのですが、だれも検
証しなかったので、そのままになってます。

|今思ったのですが、srandに負の数を与えてはいけませんか?
|それと、
|
|irb(main):001:0> srand(2**32-1)
|0
|irb(main):002:0> srand(2**32-1)
|-1
|
|と、種を保存する型がintです。

これはunsignedにしないといけませんね。バグと言っても良いでしょ
う。感謝します。
                                まつもと ゆきひろ /:|)