Jump to content

Pseudo-random numbers/Splitmix64: Difference between revisions

Add Factor
m (→‎{{header|C}}: Added a program comment re printf verb.)
(Add Factor)
Line 116:
16408922859458223821
0: 20027 1: 19892 2: 20073 3: 19978 4: 20030
</pre>
 
=={{header|Factor}}==
<lang factor>USING: io kernel math math.bitwise math.functions
math.statistics namespaces prettyprint sequences ;
 
SYMBOL: state
 
: seed ( n -- ) 64 bits state set ;
 
: next-int ( -- n )
0x9e3779b97f4a7c15 state [ + 64 bits ] change
state get -30 0xbf58476d1ce4e5b9 -27 0x94d049bb133111eb -31 1
[ [ dupd shift bitxor ] dip * 64 bits ] 2tri@ ;
 
: next-float ( -- x ) next-int 2 64 ^ /f ;
 
! Test next-int
"Seed: 1234567; first five integer values" print
1234567 seed 5 [ next-int . ] times nl
 
! Test next-float
"Seed: 987654321; first 100,000 float values histogram" print
987654321 seed 100,000 [ next-float 5 * >integer ] replicate
histogram .</lang>
{{out}}
<pre>
Seed: 1234567; first five integer values
6457827717110365317
3203168211198807973
9817491932198370423
4593380528125082431
16408922859458223821
 
Seed: 987654321; first 100,000 float values histogram
H{ { 0 20027 } { 1 19892 } { 2 20073 } { 3 19978 } { 4 20030 } }
</pre>
 
1,808

edits

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