Pseudo-random numbers/Xorshift star: Difference between revisions
Content added Content deleted
m (removed debug code from example) |
SqrtNegInf (talk | contribs) (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}}== |