use*_*220 5 java random matlab mersenne-twister
我正在比较Java和matlab中的mersenne twister.我在两者中使用相同的种子.我的问题是,当我从每个数字生成器打印出10个数字(分别用Java和Matlab运行的Mersenne Twister)时,结果输出似乎不匹配.来自Matlab版本的输出数据打印出Java中程序的每秒数.
Java打印:
0.417,0.997,0.720,0.932,0.0001 ..
Matlab打印:
0.417,0.720,0.0001 ..
任何人都可以指出我正确的方向来弄清楚为什么会发生这种情况?
Java的:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
Matlab的:
s = RandStream('twister','Seed',1)
RandStream.setGlobalStream(s);
r = 1 .* rand(1,10);
Run Code Online (Sandbox Code Playgroud)
我在MatLab中使用Mersenne Twister的标准实现,我正在使用的Java版本可以在这里找到
Matlabrand()结果是 64 位double值。但是您正在调用nextFloat()以从 Java 获取 32 位值MersenneTwister。检查 Java 源代码nextDouble使用的随机性是否是两次nextFloat调用的两倍next()。在 Java 代码中替换nextFloat()为,结果应该会更好。nextDouble()TestRand