Data update
This commit is contained in:
parent
29a5eea0d4
commit
5c1bb7bfa9
2011 changed files with 35081 additions and 3229 deletions
|
|
@ -0,0 +1,49 @@
|
|||
#define floor(x) ((x*2.0-0.5) Shr 1)
|
||||
|
||||
Const As Ulongint mask64 = &HFFFFFFFFFFFFFFFF
|
||||
Const As Ulongint mask32 = &HFFFFFFFF
|
||||
Const As Ulongint cte = 6364136223846793005
|
||||
|
||||
Dim Shared As Ulongint state, inc
|
||||
|
||||
Function next_int() As Ulongint
|
||||
' return random 32 bit unsigned int
|
||||
Dim As Ulongint old = state
|
||||
state = ((old * cte) + inc) And mask64
|
||||
Dim As Ulongint xorshifted = (((old Shr 18) Xor old) Shr 27) And mask32
|
||||
Dim As Ulongint rot = (old Shr 59) And mask32
|
||||
Dim As Ulongint answer = (xorshifted Shr rot) Or (xorshifted Shl ((-rot) And 31))
|
||||
answer And= mask32
|
||||
Return answer
|
||||
End Function
|
||||
|
||||
Function next_float() As Double
|
||||
' return random float between 0 and 1
|
||||
Return next_int() / (2 ^ 32)
|
||||
End Function
|
||||
|
||||
Sub seed(seed_state As Ulongint, seed_sequence As Ulongint)
|
||||
state = 0
|
||||
inc = ((seed_sequence Shl 1) Or 1) And mask64
|
||||
next_int()
|
||||
state = (state + seed_state) And mask64
|
||||
next_int()
|
||||
End Sub
|
||||
|
||||
Dim As Integer i, hist(4)
|
||||
|
||||
seed(42, 54)
|
||||
For i = 1 To 5
|
||||
Print next_int()
|
||||
Next i
|
||||
|
||||
Print !"\nThe counts for 100,000 repetitions are:"
|
||||
seed(987654321, 1)
|
||||
For i = 1 To 100000
|
||||
hist(floor(next_float() * 5)) += 1
|
||||
Next i
|
||||
For i = 0 To 4
|
||||
Print Using "hist(#) = #####"; i; hist(i)
|
||||
Next i
|
||||
|
||||
Sleep
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
include "bitwise" {search: "."}; # see above
|
||||
|
||||
def Const: 6364136223846793005;
|
||||
def Mask64: 18446744073709551615; # i.e. (1 | leftshift(64)) - 1
|
||||
def Mask32: 4294967295; # i.e. (1 | leftshift(32)) - 1
|
||||
|
||||
# An initialization function if you do not wish to use seed/2
|
||||
def rcg32:
|
||||
{state: 9600629759793949339, # 0x853c49e6748fea9b
|
||||
inc: 15726070495360670683 # 0xda3e39cb94b95bdb
|
||||
};
|
||||
|
||||
# Input: {state, inc}
|
||||
# Output: {state, inc, nextInt}
|
||||
def nextInt:
|
||||
.state as $old
|
||||
| .state = bitwise_and($old * Const + .inc; Mask64)
|
||||
| bitwise_and(( bitwise_xor($old | rightshift(18); $old) | rightshift(27)); Mask32) as $xorshifted
|
||||
| bitwise_and($old|rightshift(59) ; Mask32) as $rot
|
||||
| .nextInt = bitwise_and(
|
||||
bitwise_or(
|
||||
$xorshifted | rightshift($rot) ;
|
||||
$xorshifted | leftshift( bitwise_and( 32 - $rot; 31) )) ;
|
||||
Mask32) ;
|
||||
|
||||
def nextFloat:
|
||||
nextInt
|
||||
| .nextFloat = .nextInt / pow(2;32);
|
||||
|
||||
def seed($seedState; $seedSequence):
|
||||
{state: 0,
|
||||
inc: bitwise_and( bitwise_xor($seedSequence|leftshift(1); 1); Mask64)
|
||||
}
|
||||
| nextInt
|
||||
| .state += $seedState
|
||||
| nextInt;
|
||||
|
||||
def task1($n):
|
||||
foreach range(0; $n) as $i (seed(42; 54); nextInt)
|
||||
| .nextInt;
|
||||
|
||||
def task2($n):
|
||||
reduce range(0; $n) as $i (seed(987654321; 1);
|
||||
nextFloat
|
||||
| .counts[((.nextFloat * 5)|floor)] += 1)
|
||||
| "\nThe counts for \($n) repetitions are:",
|
||||
(range(0; 5) as $i | "\($i) : \(.counts[$i])") ;
|
||||
|
||||
task1(5),
|
||||
task2(100000)
|
||||
Loading…
Add table
Add a link
Reference in a new issue