in reply to Re: PDL and srand puzzle
in thread PDL and srand puzzle

This is good attitude, thanks etj

perhaps srandom ? or setseed or just rename random() to rand() so that PDL completely takes over Perl's (edit:I mean both srand() and rand()) as I believe one of syphilis's frustrations is that he is setting the seed to the wrong RNG and sees no effect. The latter would of course be not curteous unless you really know what you are doing as this can have security implications for 3rd-parties or even core modules.

Replies are listed 'Best First'.
Re^3: PDL and srand puzzle
by swl (Prior) on Jun 04, 2024 at 23:25 UTC

    srandom makes sense to me. Then both subs follow the pattern of appending "om" to the core variants.

    If one is to override perl's rand then it should be kept to "opt-in" behaviour to avoid violating the principle of least surprise.

      That's really good! I've renamed it to srandom, and will be dev-releasing as 2.089_01 very soon, after I fix the fix for pptest not working on noexec mounts breaking the top-level Makefile.PL.

        Hi, etj

        Calling PDL->random is less unique among threads versus rand().

        Edit: etj identified a race condition, hence less uniqueness.

        use v5.030; use threads; use PDL; BEGIN { $PDL::no_clone_skip_warning = 1; } for my $id (1..4) { threads->create(sub { for (1..8000) { # my $r = CORE::rand(); my $r = PDL->random; say $r; } }); } $_->join for threads->list;

        Thread CORE::rand()

        $ perl test.pl | LC_ALL=C sort | uniq -c | sort -n | tail 1 0.9999196288117 1 0.999939390107826 1 1.52499260792638e-05 1 5.77532994405772e-05 1 6.39378495463916e-05 1 6.94432865593342e-05 1 7.17426768090945e-05 1 8.48674303988162e-05 1 9.10499814921195e-05 1 9.32151475616649e-05

        Thread PDL->random

        $ perl test.pl | LC_ALL=C sort | uniq -c | sort -n | tail 3 0.578372644755136 3 0.587725272162442 3 0.629117050685529 3 0.665209931957569 3 0.666012741533792 3 0.715907985301874 3 0.780440518879262 3 0.789289520984441 3 0.859969220981904 3 0.975280763021946