3

とりわけ一連の 64 ビットのランダム整数を含むバイナリ ファイルを生成する matlab 関数を作成しようとしています。これらは高品質である必要があります。そのため、64 ビット メルセンヌ ツイスター アルゴリズムまたはそれ以上を使用したいと考えています。組み込みのrandi()関数は、32 ビットの数値しか生成できません。以前に以下を使用して 32 ビットの結果を生成しました。

rng('shuffle', 'twister');
randi(2^32-1, 'uint32')

ただし、これは 64 ビットでは使用できません。複数の 32 ビット整数を使用して 64 ビットのランダムな整数を生成することを正しく思い出すと、悪い習慣ですが、良い解決策があれば、私はそれを受け入れます。
さらに難しいことに、私は現在 32 ビットの Windows XP マシンを使用しています。

4

3 に答える 3

1

このページから判断すると、乗法ラグ フィボナッチ ジェネレーターを使用できる可能性があります。しかし、一般的な基準では、メルセンヌ・ツイスターよりも優れた性能を発揮するとは思いません。

さらに、64 ビットの Matlab を実行するには 64 ビットのマシンが必要です。

編集:この質問は、Matlab の 64 ビット バージョンが既定の設定で 64 ビットのランダムな整数を既に生成していることも示唆しています。

于 2013-04-09T13:23:32.513 に答える
1

本当に高品質の乱数が必要な場合は、Mersenne Twister の 64 ビット バージョンが公開されています。C での実装は次のとおりです。「64ビットマシン」用と書かれていますが、32ビットマシンでもコンパイルできると思いますunsigned long long-64ビットポインターではなく、を使用しているだけです。これを MEX ファイルに平手打ちすれば、M コードから簡単に呼び出すことができます。

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt64.html

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/C-LANG/mt19937-64.c

于 2013-04-10T03:18:43.410 に答える