0からの、超初心者C++相談室at TECH0からの、超初心者C++相談室 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト250:デフォルトの名無しさん 21/05/20 02:25:38.74 Dz+v3/+O.net >>227 の結果は予想と外れていると思う。 rand()は均等確率のはずなのに、100で割って下一桁に9ばかり出るはずはない。 251:デフォルトの名無しさん 21/05/20 02:28:22.34 UJvm/t/I.net >>247 なるほど。言われてみればそうだわ。 32767はもともと100で割り切れないから、一部を捨ててやらないと 均等にはならないな。 252:デフォルトの名無しさん 21/05/20 02:52:09.51 onv6EMq1.net しかし、昔実験してみた限り、rand()の周期は、通常、RAND_MAX + 1 であり、rand()自体は均等確率のはずだ。 それはべつに、>>247ではちみつが言っていることと矛盾するわけではない。 RAND_MAXが32767のように100で割り切れない値だから、>>228 のようにすると、端数の様な部分でわずかに均等確率からずれてしまう。 ただし、ずれる範囲は、32767/100 = 327.67 なので、確率にして 0.67/327 程度以下の小さなずれではあるが。 253: 21/05/20 22:00:26.21 +zMkmbAL.net >>247 剰余を取って特定範囲の乱数を生成することができるのは、元の乱数が MT 並に性質がよいときだけかと、つまり >>247 はちみつ氏のやりかたは、元の乱数が優れたものだからできる方法 MT が発明されるまでは、最悪の方法「線形合同法」でもなんとか我慢できる部分範囲の乱酔生成法しか推奨されなかった C FAQ をみてもそれがわかりますね http://www.kouno.jp/home/c_faq/c13.html#16 13.16: A:ある範囲の整数からなる乱数はどうやったら生成することができるか。 Q:すぐに思い付く、 rand() % N (これは0からN-1までの数を返そうとする)は乱数の質が低い。なぜな ら乱数発生器の多くで下位のビットは悲惨なほどランダムでない。よりよい方法は以下のようなものである。 (int)((double)rand() / ((double)RAND_MAX + 1) * N) 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch