Jump to content

Pseudo-random numbers/Splitmix64: Difference between revisions

Added Perl
No edit summary
(Added Perl)
Line 320:
0: 20027 1: 19892 2: 20073 3: 19978 4: 20030
</pre>
 
=={{header|Perl}}==
<lang perl>use strict;
use warnings;
no warnings 'portable';
use feature 'say';
use Math::AnyNum qw(:overload);
 
{ package splitmix64;
 
our($state);
 
sub new { $state = $_[2] }
 
sub next_int {
my $next = $state = ($state + 0x9e3779b97f4a7c15) & (2**64 - 1);
$next = ($next ^ ($next >> 30)) * 0xbf58476d1ce4e5b9 & (2**64 - 1);
$next = ($next ^ ($next >> 27)) * 0x94d049bb133111eb & (2**64 - 1);
($next ^ ($next >> 31)) & (2**64 - 1);
}
}
 
say 'Seed: 1234567, first 5 values:';
my $rng = splitmix64->new( seed => 1234567 );
say splitmix64->next_int($rng) for 1..5;
 
my %h;
say "\nSeed: 987654321, values histogram:";
$rng = splitmix64->new( seed => 987654321 );
$h{int 5 * splitmix64->next_int($rng)/2**64}++ for 1..100_000;
say "$_ $h{$_}" for sort keys %h;</lang>
{{out}}
<pre>Seed: 1234567, first 5 values:
6457827717110365317
3203168211198807973
9817491932198370423
4593380528125082431
16408922859458223821
 
Seed: 987654321, values histogram:
0 20027
1 19892
2 20073
3 19978
4 20030</pre>
 
=={{header|Phix}}==
2,392

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.