From: Kenta Murata Date: 2011-04-25T11:38:38+09:00 Subject: [ruby-dev:43440] Re: [ruby-cvs:38520] Ruby:r31340 (trunk): * random.c (random_s_rand, Init_Random): Random.rand should behave as むらたです。 On 2011年4月25日月曜日 at 10:25, Urabe Shyouhei wrote: > 卜部です > > (04/25/2011 07:27 AM), mrkn@ruby-lang.org wrote: > > * random.c (rb_f_rand): accept a Range argument as Random#rand > > [ruby-dev:43427] #4605 > > おお、入っちゃったんですね... > > かなり昔に、たしかakrさんに、「浮動小数点数は数直線の中で一様に分布しているわ > けではないので、その任意区間の乱数の分布は必ずしも一様にはならないのではない > か?」というような内容のことを言われたような微かな記憶がある関係で、 その議論については私も覚えています。 実はきのう patch を書くまで浮動小数点数を受け付けてる事に気付いてなかったんですが、 調べてみると 2009 年から実装されていました。 commit 96760236079b15674a6322a2ca41b1528b51afbd Author: nobu Date: Wed Aug 26 10:20:30 2009 +0000 * random.c (random_rand): unified random_int and random_float. [ruby-dev:39158]. and fixes [ruby-core:24655], [ruby-core:24677], [ruby-core:24679]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24670 b2dd03c8-39d4-4d8f-98ff-823fe69b080e このコミットで追加されたようです。 > rangeの端が > Floatの場合はどうなるんだろうなーと思ってたんですが、んー、実装を読むと、 > genrand_realから0.5引いて0の回りに集めてから左右に伸ばして中央を横にずらす感じ? > > まあ素人目には大丈夫そうにも思いますが、どうなんだろう。 最後に中央をずらしたときに一様分布ではなくなる可能性があります。 (Range の beg と end がそれぞれ異なるスケールを持つ場合)。 -- Kenta Murata Sent with Sparrow