Bug 55215 - Constructor seeding is broken for Mersenne twister
Summary: Constructor seeding is broken for Mersenne twister
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: libstdc++ (show other bugs)
Version: 4.6.4
: P3 normal
Target Milestone: 4.7.3
Assignee: Paolo Carlini
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-11-05 16:14 UTC by da-wgh
Modified: 2012-11-05 20:12 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2012-11-05 00:00:00


Attachments
reproduction (231 bytes, text/x-c)
2012-11-05 16:15 UTC, da-wgh
Details

Note You need to log in before you can comment on or make changes to this bug.
Description da-wgh 2012-11-05 16:14:25 UTC
http://ideone.com/p8B7lF (the code is also provided in attachment).

I expected that both functions, f and g, would return the same value every time. But, as we can see, initializing Mersenne using its constructor doesn't yield consistent results.

I tested compiler from Visual Studio 2012, and it doesn't have this bug. Other random number engines probably don't have this bug (I tested std::minstd_rand).
Comment 1 da-wgh 2012-11-05 16:15:06 UTC
Created attachment 28619 [details]
reproduction
Comment 2 Paolo Carlini 2012-11-05 17:44:02 UTC
It's a stupid uninitialized variable. Will fix momentarily.
Comment 3 paolo@gcc.gnu.org 2012-11-05 19:25:27 UTC
Author: paolo
Date: Mon Nov  5 19:25:20 2012
New Revision: 193181

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=193181
Log:
2012-11-05  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/55215
	* include/bits/random.tcc (mersenne_twister_engine<>::seed(_Sseq&)):
	Assign state_size to _M_p.
	* testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc:
	New.
	* testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc:
	Likewise.
	* testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc:
	Likewise.
	* testsuite/26_numerics/random/subtract_with_carry_engine/cons/
	55215.cc: Likewise.
	* testsuite/26_numerics/random/discard_block_engine/cons/55215.cc:
	Likewise.
	* testsuite/26_numerics/random/linear_congruential_engine/cons/
	55215.cc: Likewise.

Added:
    trunk/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/55215.cc
    trunk/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc
    trunk/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/55215.cc
    trunk/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc
    trunk/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc
    trunk/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/55215.cc
Modified:
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/include/bits/random.tcc
Comment 4 paolo@gcc.gnu.org 2012-11-05 20:11:44 UTC
Author: paolo
Date: Mon Nov  5 20:11:32 2012
New Revision: 193183

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=193183
Log:
2012-11-05  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/55215
	* include/bits/random.tcc (mersenne_twister_engine<>::seed(_Sseq&)):
	Assign state_size to _M_p.
	* testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc:
	New.
	* testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc:
	Likewise.
	* testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc:
	Likewise.
	* testsuite/26_numerics/random/subtract_with_carry_engine/cons/
	55215.cc: Likewise.
	* testsuite/26_numerics/random/discard_block_engine/cons/55215.cc:
	Likewise.
	* testsuite/26_numerics/random/linear_congruential_engine/cons/
	55215.cc: Likewise.

Added:
    branches/gcc-4_7-branch/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/55215.cc
    branches/gcc-4_7-branch/libstdc++-v3/testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc
    branches/gcc-4_7-branch/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/cons/55215.cc
    branches/gcc-4_7-branch/libstdc++-v3/testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc
    branches/gcc-4_7-branch/libstdc++-v3/testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc
    branches/gcc-4_7-branch/libstdc++-v3/testsuite/26_numerics/random/subtract_with_carry_engine/cons/55215.cc
Modified:
    branches/gcc-4_7-branch/libstdc++-v3/ChangeLog
    branches/gcc-4_7-branch/libstdc++-v3/include/bits/random.tcc
Comment 5 Paolo Carlini 2012-11-05 20:12:42 UTC
Fixed mainline and 4.7.3.