Pseudo-random numbers/Xorshift star: Difference between revisions
Pseudo-random numbers/Xorshift star (view source)
Revision as of 00:42, 27 February 2021
, 3 years ago→{{header|F_Sharp|F#}}
Line 368:
return 0;
}</lang>
{{out}}
<pre>3540625527
2750739987
4037983143
1993361440
3809424708
0: 20103
1: 19922
2: 19937
3: 20031
4: 20007</pre>
=={{header|D}}==
{{trans|C++}}
<lang d>import std.math;
import std.stdio;
class XorShiftStar {
private immutable MAGIC = 0x2545F4914F6CDD1D;
private ulong state;
public void seed(ulong num) {
state = num;
}
public uint nextInt() {
ulong x;
uint answer;
x = state;
x = x ^ (x >> 12);
x = x ^ (x << 25);
x = x ^ (x >> 27);
state = x;
answer = ((x * MAGIC) >> 32);
return answer;
}
public float nextFloat() {
return cast(float) nextInt() / (1L << 32);
}
}
void main() {
auto rng = new XorShiftStar();
rng.seed(1234567);
writeln(rng.nextInt);
writeln(rng.nextInt);
writeln(rng.nextInt);
writeln(rng.nextInt);
writeln(rng.nextInt);
writeln;
int[5] counts;
rng.seed(987654321);
foreach (_; 0 .. 100_000) {
auto j = cast(int) floor(rng.nextFloat * 5.0);
counts[j]++;
}
foreach (i, v; counts) {
writeln(i, ": ", v);
}
}</lang>
{{out}}
|