diff --git a/stl/inc/random b/stl/inc/random index d943cd1305c..09b7418d93e 100644 --- a/stl/inc/random +++ b/stl/inc/random @@ -827,7 +827,7 @@ public: void seed(_Seed_t _Value = 0u, bool _Readcy = false) { // set initial values from specified seed value linear_congruential_engine _Lc{ - static_cast(_Value == 0U ? default_seed : _Value)}; + _Value == 0U ? default_seed : static_cast(_Value % 2147483563U)}; _Reset(_Lc, _Readcy); } diff --git a/tests/std/tests/Dev11_0577418_random_seed_0/test.cpp b/tests/std/tests/Dev11_0577418_random_seed_0/test.cpp index 3bfbefecbc8..0abbabcbe6d 100644 --- a/tests/std/tests/Dev11_0577418_random_seed_0/test.cpp +++ b/tests/std/tests/Dev11_0577418_random_seed_0/test.cpp @@ -24,14 +24,14 @@ int main() { // Also test VSO-214595 "subtract_with_carry_engine::seed should accept result_type" subtract_with_carry_engine ull_swc; ull_swc.seed(0x12341234'00000000ULL); - assert(run_10k(ull_swc) == 0x1DD6C263'C41EEED0ULL); // value changed by LWG-3809 + assert(run_10k(ull_swc) == 0x01316AEA'3646F686ULL); // libstdc++ 14.2 and libc++ 19.1 agree, Boost 1.86.0 disagrees assert(minstd_rand0(0) == minstd_rand0()); // N4964 [rand.eng.lcong]/5 assert(mt19937(0) != mt19937()); // N4964 [rand.eng.mers]/6 assert(ranlux24_base(0) == ranlux24_base()); // N4964 [rand.eng.sub]/7 assert(run_10k(minstd_rand0(0)) == 1043618065UL); // QED - assert(run_10k(mt19937(0)) == 1543171712UL); // Boost 1.52.0 agrees + assert(run_10k(mt19937(0)) == 1543171712UL); // Boost 1.86.0 agrees assert(run_10k(ranlux24_base(0)) == 7937952UL); // QED // Also test LWG-3809 Is std::subtract_with_carry_engine supposed to work?