| ■7076 / ) |
Re[13]: Long型の乱数を生成する自作クラスをつくりたい |
□投稿者/ れい (85回)-(2007/08/29(Wed) 21:48:57)
|
■No7041 (ぼのぼの さん) に返信 > ■No7022 (れい さん) に返信 > そこなんですよね。経営的視点で見ると、そこに時間を割いても会社の利益に直接結びつかない。 > となると技術者としての自己満足の世界になってくるわけで、個人的に楽しめるかが重要になる。 > 自分の場合は、最近はこういう数学的に深いとこよりもユーザビリティとかの方に興味があるので、 > ここにエネルギーをかける気力は今のところあまりないんですよね(^^; > > UInt64で計算するバージョンを作ってみました。 > もし穴が空いていたら遠慮なく突っ込んでください。
やっぱり一様性はあんまりよくないですね。
> ul = umin + ul Mod (umax - umin + 1UL)
こうやって余りを計算してしまうと、 どうしても偏りが出てしまいます。
umin = 0 umax = ULong.MaxValue*2/3
となるとULong.MaxValue/3を超える数と超えない数の出現確率は 倍違うことになります。
切ったり貼ったりでは、 どうやっても一様性が保てません。
サイコロで1〜5の乱数が欲しいとき、 6を1として扱ってしまっては、いけないんです。
・6が出たときにサイコロを振りなおす ・はじめから20面体のサイコロを使う
など、違う方法を考えないといけません。
|
|