5

Java と matlab でメルセンヌ ツイスターを比較しています。私は両方で同じ種子を使用しています。私の問題は、各数値ジェネレーター (それぞれ Java と Matlab で実行されている Mersenne Twister) から 10 個の数値を出力すると、結果の出力が一致しないように見えることです。Matlab バージョンからの出力データは、Java のプログラムから毎秒の数値を出力します。

Java プリント:

0.417、0.997、0.720、0.932、0.0001..

Matlab プリント:

0.417、0.720、0.0001..

なぜこれが起こるのかを理解するために、誰かが私を正しい方向に向けることができますか?

ジャワ:

public class TestRand {
    static MersenneTwister r = new MersenneTwister(1);

    public static void main(String[] args) {

        int ant = 10;
        float[] randt = new float[ant];

        for (int i = 0; i < ant; i++){
            randt[i] = r.nextFloat()*1;
            System.out.println(randt[i]);    
        }
        System.out.println("------------twist");
    }
}

マトラブ:

s = RandStream('twister','Seed',1)
RandStream.setGlobalStream(s);

r = 1 .* rand(1,10);

私は MatLab で Mersenne Twister の標準実装を使用しています。私が使用している Java バージョンはここにあります。

4

1 に答える 1

2

Matlab のrand()結果は 64 ビットdouble値です。しかしnextFloat()、Java から 32 ビット値を取得するために呼び出していますMersenneTwister。Java nextDoublesource- が の 2 倍のランダム性を使用しnextFloat、 を 2 回呼び出していることを確認してくださいnext()。Java コードで を置き換えるnextFloat()と、結果がより適切に表示されるはずです。nextDouble()TestRand

于 2013-03-20T23:05:38.373 に答える