XORO32 parameters don't match alleged values...
Wuerfel_21
Posts: 5,690
in Propeller 2
In this forum post, the parameters for the xoroshiro32++ generator are alleged to be A = 14, B = 2, C = 7, D = 5. However, experimental confirmation reveals that it is actually using A = 13, B = 5, C = 10, D = 9. How curious...
CON
_CLKFREQ = 300_000_000
A = 13, B = 5, C = 10, D = 9
PUB main() | seed, val_hw, state_hw, val_soft, state_soft
repeat
seed := getrnd()
org
mov state_hw,seed
xoro32 state_hw
mov val_hw,0-0
end
state_soft,val_soft := xoro32_soft(seed)
if state_soft <> state_hw OR val_soft <> val_hw
debug("FAIL: ",uhex_long(seed,state_hw,state_soft,val_hw,val_soft))
PUB xoro32_soft(seed) : state,val
state, val.word[0] := xoro32_half(seed)
state, val.word[1] := xoro32_half(state)
PRI xoro32_half(seed) : state,val | temp
val.word[0] := rol16(seed.word[0]+seed.word[1],D)+seed.word[0]
state := seed
state.word[1] ^= state.word[0]
state.word[0] := rol16(state.word[0],A) ^ (state.word[1]<<B) ^ state.word[1]
state.word[1] := rol16(state.word[1],C)
PRI rol16(val,amount) :r
val.word[1] := val.word[0]
return (val rol amount) zerox 15

Comments
How many [A,B,C,D] quadruples did you test?
Post 16 told people about the change. Rev A uses [14,2,7,5].
All 2^16 of them, as it were
Oh, the irony of not reading the "doc" fully.