Pseudo-random numbers/Xorshift star: Difference between revisions

Content added Content deleted
m (removed debug code from example)
(Added Perl)
Line 439: Line 439:
3: 20031
3: 20031
4: 20007</pre>
4: 20007</pre>

=={{header|Perl}}==
<lang perl>use strict;
use warnings;
no warnings 'portable';
use feature 'say';
use Math::AnyNum qw(:overload);

{ package Xorshift_star;

our($state);

sub new { $state = $_[2] }

sub next_int {
$state ^= $state >> 12;
$state ^= $state << 25 & (2**64 - 1);
$state ^= $state >> 27;
($state * 0x2545F4914F6CDD1D) >> 32 & (2**32 - 1)
}
}

say 'Seed: 1234567, first 5 values:';
my $rng = Xorshift_star->new( seed => 1234567 );
say Xorshift_star->next_int($rng) for 1..5;

my %h;
say "\nSeed: 987654321, values histogram:";
$rng = Xorshift_star->new( seed => 987654321 );
$h{int 5 * Xorshift_star->next_int($rng)/2**32}++ for 1..100_000;
say "$_ $h{$_}" for sort keys %h;</lang>
{{out}}
<pre>Seed: 1234567, first 5 values:
3540625527
2750739987
4037983143
1993361440
3809424708

Seed: 987654321, values histogram:
0 20103
1 19922
2 19937
3 20031
4 20007</pre>


=={{header|Phix}}==
=={{header|Phix}}==