Mersenne twister random numbers not the same as C++
    14 views (last 30 days)
  
       Show older comments
    
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 Comments
Answers (1)
  Shantanu Dixit
      
 on 24 Apr 2025
        
      Edited: Shantanu Dixit
      
 on 24 Apr 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 Comments
See Also
Categories
				Find more on Random Number Generation in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
