Pseudo-random numbers/Combined recursive generator MRG32k3a: Difference between revisions
Content added Content deleted
m (→{{header|Perl}}: minor code simplifications) |
(Added Sidef) |
||
Line 1,276: | Line 1,276: | ||
3: 20059 |
3: 20059 |
||
4: 19931</pre> |
4: 19931</pre> |
||
=={{header|Sidef}}== |
|||
{{trans|Perl}} |
|||
<lang ruby>class MRG32k3a(seed) { |
|||
define( |
|||
m1 = (2**32 - 209) |
|||
m2 = (2**32 - 22853) |
|||
) |
|||
define( |
|||
a1 = %n< 0 1403580 -810728> |
|||
a2 = %n<527612 0 -1370589> |
|||
) |
|||
has x1 = [seed, 0, 0] |
|||
has x2 = x1.clone |
|||
method next_int { |
|||
x1.unshift(a1.map_kv {|k,v| v * x1[k] }.sum % m1); x1.pop |
|||
x2.unshift(a2.map_kv {|k,v| v * x2[k] }.sum % m2); x2.pop |
|||
(x1[0] - x2[0]) % (m1 + 1) |
|||
} |
|||
method next_float { self.next_int / (m1 + 1) -> float } |
|||
} |
|||
say "Seed: 1234567, first 5 values:" |
|||
var rng = MRG32k3a(seed: 1234567) |
|||
5.of { rng.next_int }.each { .say } |
|||
say "\nSeed: 987654321, values histogram:"; |
|||
var rng = MRG32k3a(seed: 987654321) |
|||
var freq = 100_000.of { rng.next_float * 5 -> int }.freq |
|||
freq.sort.each_2d {|k,v| say "#{k} #{v}" }</lang> |
|||
{{out}} |
|||
<pre> |
|||
Seed: 1234567, first 5 values: |
|||
1459213977 |
|||
2827710106 |
|||
4245671317 |
|||
3877608661 |
|||
2595287583 |
|||
Seed: 987654321, values histogram: |
|||
0 20002 |
|||
1 20060 |
|||
2 19948 |
|||
3 20059 |
|||
4 19931 |
|||
</pre> |
|||
=={{header|uBasic/4tH}}== |
=={{header|uBasic/4tH}}== |