On Mon, Apr 6, 2015 at 3:01 AM, Stefan Marr <smalltalk@stefan-marr.de> wrote:
Hi:
On 03 Apr 2015, at 17:44, Eliot Miranda <eliot.miranda@gmail.com> wrote:
seed := ((seed + 16r7ed55d16) + (seed << 12)) & 16rffffffff. seed := ((seed ^ 16rc761c23c) ^ (seed as32BitSignedValue >>> 19)) & 16rffffffff. seed := ((seed + 16r165667b1) + (seed << 5)) & 16rffffffff. seed := ((seed + 16rd3a2646c) ^ (seed << 9)) & 16rffffffff. seed := ((seed + 16rfd7046c5) + (seed << 3)) & 16rffffffff. seed := ((seed ^ 16rb55a4f09) ^ (seed as32BitSignedValue >>> 16)) & 16rffffffff. ^ seed as32BitSignedValue
Ok, my implementation looks now like this:
random "Robert Jenkins' 32 bit integer hash function." seed := ((seed + 16r7ed55d16) + (seed << 12)). seed := ((seed bitXor: 16rc761c23c) bitXor: ((seed bitAnd: 16rffffffff) >> 19)). seed := ((seed + 16r165667B1) + (seed << 5)). seed := ((seed + 16rd3a2646c) bitXor: (seed << 9)). seed := ((seed + 16rfd7046c5) + (seed << 3)). seed := self as32BitSigned: ((seed bitXor: 16rb55a4f09) bitXor: ((seed bitAnd: 16rffffffff) >> 16)). ^ seed
as32BitSigned: val | r | r := val bitAnd: 16rffffffff. (r bitAnd: 16r80000000) = 0 ifTrue: [ ^ r ]. ^ (16r100000000 - r) * -1
The #as32BitSigned: looks a little naive, but didnât have any better idea.
And Andres, the random number generator is a given, I canât just change it.
On Sat, Apr 4, 2015 at 2:49 PM, Andres Valloud < avalloud@smalltalk.comcastbiz.net> wrote:
Lagged Fibonacci RNGs are much more Smalltalk friendly, I'd use those.
Or maybe you can substitute a Lagged Fibonacci RNGs back into the Java (If a more favourable comparison ends up being needed). cheers -ben