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