Mersenne twister random numbers not the same as C++
12 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi,
Trying to get the same random numbers in Matlab and C++ by using the Mersenne twister, but Matlab seems to skip every second output of Mersenne twister and also small differences are seen in the 32 bit words that (almost) match the C++ output, see example below.
Is there some way to get the same numbers in Matlab as you get when using the C++ standard?
% Print first 10 numbers from Mersenne twister in interval [0, 2^32-1] with 7 as seed
rng(7, 'twister');
randi([0 4294967295],1,10, 'uint32')'
% Matlab 9.3.0.713579 (R2017b) printout:
% 327741607
% 3349725706
% 1882953311
% 3107259278
% 4200432969
% 2312822152
% 2152296002
% 309457261
% 1152936640
% 2146978992
% C++ implementation and printout
%#include <iostream>
%#include <random>
% using namespace std;
% int main()
% {
% // % Print first 10 numbers from Mersenne twister in interval [0, 2^32-1] with 7 as seed
% std::mt19937 mt_rand(7);
% for (int n = 0; n < 10; n++)
% {
% cout << mt_rand() << endl;
% }
% return 0;
% }
% 327741615
% 976413892
% 3349725721
% 1369975286
% 1882953283
% 4201435347
% 3107259287
% 1956722279
% 4200432988
% 1322904761
0 commentaires
Réponses (1)
Shantanu Dixit
le 24 Avr 2025
Modifié(e) : Shantanu Dixit
le 24 Avr 2025
Hi Tobias, I’ve encountered a similar scenario where the random numbers generated by MATLAB and C++ don’t match. This might be due to MATLAB’s default Mersenne Twister using an implementation that prioritizes full precision floating-point numbers.
As a workaround, I was able to align MATLAB’s output with C++ by configuring the random stream explicitly:
R = RandStream('mt19937ar', 'Seed', 7);
R.FullPrecision = false; % Set to not use full precision
RandStream.setGlobalStream(R); % Set this as the global stream
randi([0 4294967295], 1, 10, 'uint32')'
You can refer to the following documentation to know more about setting the global stream for 'randStream':
'setGlobalStream': https://www.mathworks.com/help/matlab/ref/randstream.randstream.setglobalstream.html
Hope this helps!
0 commentaires
Voir également
Catégories
En savoir plus sur Random Number Generation dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!