タグ

乱数に関するqueserasera714のブックマーク (9)

  • ロベールのC++教室 - 第31章 出鱈目? 規則的? -

    今回はちょっと趣向を変え、疑似乱数の作り方について話します。乱数については第1部第75章でやりました。この時、「疑似乱数はある初期値を元に計算を行って生成されます」といいました。今回はその方法の1つ「線形合同法」について話します。 疑似乱数生成ルーチンを自作すると、いろいろ面白いこともできるでしょう。 では、今回の要点です。 x i+1=(ax i+c) MOD Mという数列は乱数っぽく見える。 合同法乱数は周期性を持っている。 合同法乱数は1個ずつ使えばランダムだが、組にして使うとランダム性が低い。 合同法乱数は上位ビットを取り出してから使うとよい。 では、いってみましょう。 一見でたらめな数を計算で出すにはどうすればいいでしょうか? 普通の四則演算などを行っていると、何か規則性の見える結果がでてきます。かといって、ややこしい計算をしてでたらめな数がでてきても、速度が欲しいときには実用的

  • xorshift 周期 - Google 検索

    周期の特定. 編集. シード値を128bitの二元横ベクトル β {\displaystyle \beta }. {\displaystyle \beta }. 、現在の状態から次状態への二元遷移行列を T {\displaystyle T}.

  • Xorshiftアルゴリズムを使用して乱数を発生させるクラスです 初期化処理とか正規乱数周りとか結構いい加減だったり

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    Xorshiftアルゴリズムを使用して乱数を発生させるクラスです 初期化処理とか正規乱数周りとか結構いい加減だったり
  • メルセンヌ・ツイスタ - Wikipedia

    メルセンヌ・ツイスタ (Mersenne twister、通称MT) は擬似乱数列生成器 (PRNG) の1つである。1996年に国際会議で発表されたもので(1998年1月に論文掲載)松眞と西村拓士による。既存の疑似乱数列生成手法にある多くの欠点がなく、高品質の疑似乱数列を高速に生成できる。考案者らによる実装が修正BSDライセンスで公開されている。 「メルセンヌ・ツイスタ」は厳密にはある手法に基づいた乱数列生成式(あるいは生成法)の族を指し、内部状態の大きさや周期は設定可能である。以下の長所と短所では、メルセンヌ・ツイスタ自体、よく使われている生成法のMT19937、さらにその実装について、区別することなく述べている。 219937-1 (≒4.315×106001) という長い周期が証明されている。 この周期は、名前の由来にもなっているように(24番目の)メルセンヌ素数であり、保証され

  • メルセンヌ数 - Wikipedia

    メルセンヌ数(メルセンヌすう、英: Mersenne number)とは、2の冪よりも 1 小さい自然数、すなわち 2n − 1(n は自然数)の形の自然数のことである。これを Mn で表すことが多い。メルセンヌ数を小さい順に列挙すると となる。メルセンヌ数は2進法表記で n 桁の 11⋯11、すなわちレピュニットとなる。 Mn = 2n − 1 が素数ならば n もまた素数であるが、逆は成立しない (M11 = 2047 = 23 × 89)。素数であるメルセンヌ数をメルセンヌ素数(メルセンヌそすう、英: Mersenne prime)という。なお、「メルセンヌ数」という語で、n が素数であるもののみを指したり[1]、さらに狭義の意味でメルセンヌ素数を指す場合もある[注釈 1]。 Mn が素数ならば n もまた素数であることは、次の式から分かる[2][3]: 2ab − 1 = (2a

  • すごい乱数生成アルゴリズム「xorshift」 - Pashango’s Blog

    みなさん、こんにちは、今回は乱数の話です。 特に複数機種でのコンシューマ機でゲームを開発をしていると、機種間で乱数値を統一するために乱数生成アルゴリズムを自作しますよね。 そこでよく使われるアルゴリズムが「線形合同法」です、内容は至って簡単で、以下の漸化式を使います。 A,B,Mは定数で、どの値が入るかは処理系依存です。 例えばUnixなどの処理系ではA=1103515245,B=12345,M=2147483647などが入ります。 C言語ですと以下のようになります。 static unsigned int x=1; void srand(unsigned int s) { x=s; } unsigned int rand() { x=x*1103515245UL+12345UL; return x&2147483647UL; } この「線形合同法」は計算が簡単で高速ですから、いろいろな環

    すごい乱数生成アルゴリズム「xorshift」 - Pashango’s Blog
  • 乱数ライブラリ

    2009年1月31日に64 bit Ubuntu を導入したので、 64 bit gcc での動作確認、性能評価、チューニングの作業をしました。 新しく開発しました(64 bit 非対応) jump.c.html : Xorshift で戻ったり一瞬で相対ジャンプできるプログラム 浮動小数点数に特化した乱数ライブラリ(SSE2対応) zdsfmt.zip : ライブラリ体一式 libZD.zip : エクセルのためのダイナミック・リンク・ライブラリ(DLL)一式 32ビット整数の生成は他のに比べ少し遅くなりますが、浮動小数点数の生成はかなり高速です。 元のメルセンヌ・ツイスタを使った乱数ライブラリ(SSE3対応) zmtrand.zip : ライブラリ体一式 libZMT.zip : エクセルのためのダイナミック・リンク・ライブラリ(DLL)一式 マクロ HAVE_SSE3 を定義して

  • Javaでメルセンヌ・ツイスタを使う | Hack

    ライブラリを入手 今回はこちらのsfmtライブラリを使う。 http://www001.upp.so-net.ne.jp/isaku/rand2.htmlsfmt.zip : ライブラリ一式」からダウンロード。 インストール zipを解凍したら「SfmtJAVA」を開く。 数字のフォルダがたくさん並んでいるが周期が違うのみで中身はほとんど変わりなし。 適当なフォルダを選んでその中にある「Sfmt.java」をプロジェクトにインポートすればOK。 Readme.txtに詳しい使い方が載っている。 使い方 Sfmt rnd = new Sfmt([整数値、または整数値の配列]); のようにSfmtオブジェクトを作成して使用準備完了。 整数値はシード値。 以下のようにcurrenttimeとかにしてやると毎回生成時にシードが変わって幸せ。 int[] init_key = {(int)

    Javaでメルセンヌ・ツイスタを使う | Hack
  • 良い乱数・悪い乱数

    C言語標準ライブラリの乱数rand( )は質に問題があり、禁止している学会もある。 他にも乱数には様々なアルゴリズムがあるが、多くのものが問題を持っている。 最も多くの人に使われている乱数であろう Visual Basic の Rnd の質は最低である。 そもそも乱数とは 乱数とは、来サイコロを振って出る目から得られるような数を意味する。 このような乱数は予測不能なものである。 しかし、計算機を使って乱数を発生させた場合、 次に出る数は完全に決まっているので、予測不能とはいえない。 そこで、計算機で作り出される乱数を疑似乱数(PRNG)と呼び区別することがある。 ここでは、特にことわらない限り乱数とは疑似乱数のことを指すとする。 計算機でソフト的に乱数を発生させることの最大のメリットは、 再現性があることである。 初期状態が同じであれば、発生する乱数も全く同じものが得られる。 このことは

  • 1