t/1......# Test 3 got: "0.814723691903055" (t/1.t at line 13)
# Expected: "873847195.017769552"
# t/1.t line 13 is: ok(0.814723691903055, $gen->rand());
# Test 4 got: "0.135477004107088" (t/1.t at line 14)
# Expected: "2307073947.03889426"
[snip]
####
Adding a debugging printf to the C here:
void mt_init_seed( struct mt *m, uint32_t seed )
{
int i;
uint32_t *mt;
mt = m->mt;
mt[0] = seed & 0xffffffff;
for ( i = 1; i < N; i++ ) {
mt[i] = 1812433253 * (mt[i-1]^(mt[i-1]>>30)) + i;
printf("init %d: %u\n", i, mt[i]); // what we want
}
m->mti = N;
}
and running
$ perl -MMath::Random::MT -e "Math::Random::MT->new(1)" > out
####
sub mt_init_seed {
my ($self, $seed) = @_;
my @mt;
$mt[0] = $seed & 0xffffffff;
for ( my $i = 1; $i < $N; $i++ ) {
my $xor = $mt[$i-1]^($mt[$i-1]>>30);
{ use integer; $mt[$i] = 1812433253 * $xor + $i; $mt[$i] >>= 32 if $mt[$i] > 0xffffffff }
printf("init %d: %u\n", $i, $mt[$i]);
}
$self->{mt} = \@mt;
$self->{mti} = $N;
}
and running
perl -MMath::Random::MT::Perl -e "Math::Random::MT::Perl->new(1)" > outp
####
init 1: 1812433254
init 2: 3713160357
init 3: 3109174145
init 4: 64984499
init 5: 3392658084
init 6: 446538473
init 7: 2629760756
init 8: 2453345558
init 9: 1394803949
init 10: 1021787430
init 11: 2063496713
init 12: 1304877364
init 13: 1713639158
init 14: 889001601
init 15: 1651239412
init 16: 1450863289
init 17: 745575081
init 18: 361057727
init 19: 2288771950
init 20: 1463387568
init 21: 2249488362
init 22: 26637982
init 23: 204036717
init 24: 1655702041
init 25: 1329048465
init 26: 2092351466
init 27: 1681619666
init 28: 3220660315
init 29: 1301783610
init 30: 626286181
init 31: 294669048
init 32: 3537128440
init 33: 3259518248
init 34: 2550101273
init 35: 1160881866
init 36: 308703547
init 37: 295714668
init 38: 35508674
init 39: 1599247281
init 40: 376272024
init 41: 3166459937
init 42: 1852735737
init 43: 3680868867
init 44: 612352556
init 45: 2760189833
init 46: 3816750341
init 47: 699140493
init 48: 1087846865
init 49: 394927937
init 50: 2063539671
init 51: 645417889
init 52: 2337669049
init 53: 3773167612
init 54: 678121169
init 55: 3006984620
init 56: 1163491294
init 57: 2559287860
init 58: 543155592
init 59: 3194181347
init 60: 2463543297
init 61: 3875146860
init 62: 475483913
init 63: 3707568076
init 64: 3881808875
init 65: 1264657097
init 66: 208126250
init 67: 1802809301
init 68: 367907560
init 69: 2433375693
init 70: 2851326449
init 71: 2380707878
init 72: 2911758972
init 73: 4243386879
init 74: 2229228726
init 75: 828161871
init 76: 2871116151
init 77: 990638198
init 78: 178193628
init 79: 1012573979
init 80: 1223581943
init 81: 3333023583
init 82: 1901888414
init 83: 3913876750
init 84: 3168662389
init 85: 656194888
init 86: 1553610174
init 87: 466840498
init 88: 686407570
init 89: 280737523
init 90: 2476489017
init 91: 1272981410
init 92: 3189431979
init 93: 3294710282
init 94: 1564477163
init 95: 4133221553
init 96: 823708826
init 97: 880616227
init 98: 1730254897
init 99: 335723347
init 100: 2123911971
init 101: 344194767
init 102: 119099153
init 103: 2915257116
init 104: 3339825470
init 105: 2524942970
init 106: 1191117250
init 107: 3403812186
init 108: 3988972937
init 109: 2575395295
init 110: 4072737183
init 111: 663832315
init 112: 808080503
init 113: 724042340
init 114: 2966189542
init 115: 2499643239
init 116: 3309205581
init 117: 1915303227
init 118: 72616536
init 119: 387525935
init 120: 2791701251
init 121: 2190905566
init 122: 3740328774
init 123: 831297460
init 124: 3750964864
init 125: 2190112044
init 126: 899144100
init 127: 2346558003
init 128: 3851695829
init 129: 2896963823
init 130: 1548614403
init 131: 3676707405
init 132: 2050891594
init 133: 4165893148
init 134: 1883017153
init 135: 2668787527
init 136: 50330561
init 137: 2063572142
init 138: 1853585557
init 139: 1716111087
init 140: 2937248370
init 141: 1650859709
init 142: 2682305722
init 143: 565243175
init 144: 3922227187
init 145: 3482032705
init 146: 2809081500
init 147: 2099376873
init 148: 230358556
init 149: 1065827745
init 150: 196966939
init 151: 3268845630
init 152: 3625508265
init 153: 1477799595
init 154: 4149453740
init 155: 2757835686
init 156: 3032697936
init 157: 2200108791
init 158: 3421680711
init 159: 4145382259
init 160: 3605253072
init 161: 1186485728
init 162: 3520482151
init 163: 3080733463
init 164: 3887314157
init 165: 4030447755
init 166: 1699987022
init 167: 1393253586
init 168: 1710066407
init 169: 710337383
init 170: 3754612557
init 171: 2741088369
init 172: 337455371
init 173: 1304761604
init 174: 3592681639
init 175: 3099385187
init 176: 4003676405
init 177: 317081535
init 178: 997754381
init 179: 480565460
init 180: 3806265432
init 181: 1068029852
init 182: 776179010
init 183: 470617537
init 184: 3653875421
init 185: 2273571919
init 186: 1055365147
init 187: 1317172834
init 188: 3414733003
init 189: 2835400613
init 190: 28845217
init 191: 631741764
init 192: 2334552212
init 193: 3565466095
init 194: 1225096926
init 195: 1277781438
init 196: 2416008223
init 197: 1268768054
init 198: 2750789241
init 199: 267768398
init 200: 2175383438
init 201: 268654341
init 202: 2550530755
init 203: 2971623408
init 204: 1666669894
init 205: 1934871760
init 206: 509782083
init 207: 2798468670
init 208: 2834016892
init 209: 2494149255
init 210: 1965005899
init 211: 2653045765
init 212: 2317194903
init 213: 1297426078
init 214: 916214929
init 215: 2967861004
init 216: 2236807006
init 217: 2476725285
init 218: 128488253
init 219: 4277714156
init 220: 3016192551
init 221: 1690883702
init 222: 1329810641
init 223: 593010415
init 224: 2341313579
init 225: 1754238478
init 226: 1242698701
init 227: 2152594527
init 228: 2103269013
init 229: 926178633
init 230: 647225267
init 231: 4243787142
init 232: 1489208161
init 233: 3188798921
init 234: 1327553793
init 235: 3644600811
init 236: 684513652
init 237: 2606555057
init 238: 2705329549
init 239: 2557469018
init 240: 1294205096
init 241: 70104222
init 242: 3020083528
init 243: 2015571237
init 244: 2768573480
init 245: 401698695
init 246: 2812362809
init 247: 328919870
init 248: 984940142
init 249: 1653817439
init 250: 471643152
init 251: 538942283
init 252: 2040555667
init 253: 1211982999
init 254: 1663497772
init 255: 2941793728
init 256: 3001026698
init 257: 313271977
init 258: 3644502703
init 259: 2423950047
init 260: 2629046069
init 261: 3450826936
init 262: 44600781
init 263: 2633869288
init 264: 4267014746
init 265: 4204914470
init 266: 1955987363
init 267: 2590608885
init 268: 2120168063
init 269: 1460034243
init 270: 258056600
init 271: 3693550087
init 272: 779446436
init 273: 902696389
init 274: 4228701387
init 275: 3165791227
init 276: 3478614865
init 277: 1500865135
init 278: 905884796
init 279: 3682046467
init 280: 2437847832
init 281: 2595888219
init 282: 4144484663
init 283: 1299603103
init 284: 648536946
init 285: 1762836247
init 286: 4265749196
init 287: 950840266
init 288: 2928992722
init 289: 2051369009
init 290: 2071186450
init 291: 1164619682
init 292: 210405235
init 293: 1296628868
init 294: 2425474719
init 295: 4083386904
init 296: 1978331343
init 297: 3190898799
init 298: 602128683
init 299: 2003319330
init 300: 1043377147
init 301: 756690484
init 302: 24776626
init 303: 1835824233
init 304: 1156421176
init 305: 2125448878
init 306: 1333136189
init 307: 607751135
init 308: 4255614767
init 309: 4238533009
init 310: 2583175632
init 311: 230472465
init 312: 3037259757
init 313: 1546348932
init 314: 2537279411
init 315: 110471952
init 316: 520621708
init 317: 63613561
init 318: 2843673595
init 319: 775036
init 320: 1899744556
init 321: 1168115970
init 322: 2685086321
init 323: 3410250658
init 324: 3151102153
init 325: 634647644
init 326: 3639125394
init 327: 3344624764
init 328: 1525171811
init 329: 1878800371
init 330: 3356530116
init 331: 3676542926
init 332: 602053165
init 333: 2686708238
init 334: 3703555082
init 335: 3754961372
init 336: 3970030923
init 337: 1749014201
init 338: 3391107050
init 339: 2478152000
init 340: 2121779806
init 341: 2636689360
init 342: 769835312
init 343: 4230539591
init 344: 1909812524
init 345: 417081626
init 346: 3096519324
init 347: 387659697
init 348: 3764499249
init 349: 3452925463
init 350: 3818277698
init 351: 3008920324
init 352: 15253694
init 353: 1479260759
init 354: 2421328720
init 355: 2220743357
init 356: 38831551
init 357: 1032912064
init 358: 3400956198
init 359: 2362808832
init 360: 3988706866
init 361: 1950464958
init 362: 3248573125
init 363: 1225815945
init 364: 1211036180
init 365: 346407094
init 366: 3867176764
init 367: 1257086026
init 368: 2725236231
init 369: 2843735658
init 370: 4147241082
init 371: 1729974832
init 372: 1256499145
init 373: 3765975901
init 374: 784776076
init 375: 4288277427
init 376: 3903532520
init 377: 3431522864
init 378: 2792589977
init 379: 2935989154
init 380: 3536596892
init 381: 3512984120
init 382: 605476293
init 383: 1774961976
init 384: 981422589
init 385: 822525778
init 386: 3343539932
init 387: 422954622
init 388: 1323482938
init 389: 2523465420
init 390: 2746609356
init 391: 1664448205
init 392: 272567300
init 393: 711582493
init 394: 3625722107
init 395: 3615865699
init 396: 950619756
init 397: 2864168489
init 398: 108006277
init 399: 3976313352
init 400: 680217319
init 401: 173747636
init 402: 291134870
init 403: 198587329
init 404: 595310009
init 405: 941470866
init 406: 2438488368
init 407: 1681923153
init 408: 1654783272
init 409: 3531789254
init 410: 4149541715
init 411: 2922706987
init 412: 684907209
init 413: 3116688362
init 414: 3288142886
init 415: 3953377592
init 416: 3332428007
init 417: 1400401813
init 418: 3745921798
init 419: 1701705628
init 420: 3744511893
init 421: 1838265811
init 422: 3314032512
init 423: 3894840150
init 424: 3810031409
init 425: 181324387
init 426: 983160249
init 427: 1444959400
init 428: 3836664153
init 429: 3032673327
init 430: 310789231
init 431: 3701565562
init 432: 1407580781
init 433: 2511575629
init 434: 3113822685
init 435: 1777261998
init 436: 2208898751
init 437: 106383174
init 438: 2961020500
init 439: 995776421
init 440: 3306087121
init 441: 2181030035
init 442: 2300064751
init 443: 1909543740
init 444: 4023156173
init 445: 1671619075
init 446: 2151956104
init 447: 237668401
init 448: 3204511253
init 449: 1303668692
init 450: 3868259787
init 451: 2737897899
init 452: 4091026033
init 453: 2877780671
init 454: 134376279
init 455: 398912026
init 456: 863520778
init 457: 3712468923
init 458: 3443213666
init 459: 2183809552
init 460: 2597379302
init 461: 349776833
init 462: 274697715
init 463: 4266593710
init 464: 4282186769
init 465: 3530757867
init 466: 520237914
init 467: 3369037397
init 468: 2285670338
init 469: 387086485
init 470: 618942879
init 471: 219892882
init 472: 2008897906
init 473: 2293749560
init 474: 2907436476
init 475: 3853296593
init 476: 327550390
init 477: 1558751403
init 478: 2125694704
init 479: 1822570484
init 480: 2409968265
init 481: 436622776
init 482: 2691124090
init 483: 1080819771
init 484: 2958107334
init 485: 2667158841
init 486: 2117901613
init 487: 440045635
init 488: 3861104471
init 489: 3574962701
init 490: 3210299248
init 491: 1368601573
init 492: 2434039520
init 493: 86704919
init 494: 3628108033
init 495: 1909858745
init 496: 227461000
init 497: 2530509465
init 498: 838433817
init 499: 730224848
init 500: 1060658180
init 501: 1318482825
init 502: 233266846
init 503: 2352800845
init 504: 2086493219
init 505: 3826355555
init 506: 3174377690
init 507: 1455208243
init 508: 1356597942
init 509: 663563056
init 510: 2501819374
init 511: 4213535259
init 512: 1585241464
init 513: 873997246
init 514: 2597898744
init 515: 427064229
init 516: 1587746589
init 517: 259660817
init 518: 1688808891
init 519: 4165834345
init 520: 1359025114
init 521: 2013923952
init 522: 2963511711
init 523: 2903220732
init 524: 356112706
init 525: 501549847
init 526: 1609412897
init 527: 1685128111
init 528: 2639303606
init 529: 700554261
init 530: 914150235
init 531: 2010650618
init 532: 2029243163
init 533: 3046509911
init 534: 715702687
init 535: 2206956754
init 536: 3045298216
init 537: 2922667179
init 538: 2497577415
init 539: 3001819604
init 540: 706666890
init 541: 2275923855
init 542: 3094184383
init 543: 2781697712
init 544: 3292952666
init 545: 4238614078
init 546: 278500659
init 547: 1440033346
init 548: 1552714131
init 549: 336554687
init 550: 2842580609
init 551: 2255044310
init 552: 2180071372
init 553: 99970159
init 554: 2078552309
init 555: 1172694639
init 556: 1359399314
init 557: 546452524
init 558: 349053834
init 559: 3072254369
init 560: 3043246719
init 561: 3314426498
init 562: 1594992663
init 563: 3582269665
init 564: 2114045278
init 565: 585873328
init 566: 840739494
init 567: 3475778485
init 568: 1506518790
init 569: 4008486652
init 570: 229989333
init 571: 3582278212
init 572: 363921215
init 573: 3592842520
init 574: 1833533669
init 575: 708173875
init 576: 564248927
init 577: 853943228
init 578: 2282731374
init 579: 2874158047
init 580: 3978663285
init 581: 2332696531
init 582: 1354524859
init 583: 58121641
init 584: 1445193461
init 585: 1936635021
init 586: 3374328198
init 587: 3465253060
init 588: 385589199
init 589: 1819596280
init 590: 912895627
init 591: 1877426726
init 592: 733280947
init 593: 2004202992
init 594: 3311780711
init 595: 3732053191
init 596: 309903272
init 597: 97290141
init 598: 2945419335
init 599: 3916477072
init 600: 1326195031
init 601: 3740938055
init 602: 3604745262
init 603: 3633308956
init 604: 3392929431
init 605: 1257547457
init 606: 251825182
init 607: 3318700085
init 608: 847033774
init 609: 137350663
init 610: 1716455973
init 611: 546850455
init 612: 4227574519
init 613: 3044214953
init 614: 2259874013
init 615: 2442748258
init 616: 2956971336
init 617: 2198772379
init 618: 1269686727
init 619: 2648116105
init 620: 1339159363
init 621: 1473334647
init 622: 2386671612
init 623: 2069268389