[squeak-dev] The Inbox: Kernel-nice.754.mcz

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Mon Apr 22 23:59:10 UTC 2013


And we should better make chunks of 24 bits with current generator !!!


2013/4/23 <commits at source.squeak.org>

> Nicolas Cellier uploaded a new version of Kernel to project The Inbox:
> http://source.squeak.org/inbox/Kernel-nice.754.mcz
>
> ==================== Summary ====================
>
> Name: Kernel-nice.754
> Author: nice
> Time: 23 April 2013, 1:35:44.22 am
> UUID: 6525e6a7-e2f0-4b62-87e1-38915e225671
> Ancestors: Kernel-fbs.753
>
> Quick workaround to generate a large random with a poor generator.
>
> Notably, anything above 53 bits will be biased.
> Moreover, asking 309 decimal digits or more will overflow a double.
>
> THIS DESERVES MORE THOUGHTS:
> The workaround should better be handled in the generator itself...
>
> =============== Diff against Kernel-fbs.753 ===============
>
> Item was added:
> + ----- Method: LargePositiveInteger>>atRandom: (in category 'truncation
> and round off') -----
> + atRandom: aGenerator
> +       "Answer a random integer from 1 to self picked from aGenerator."
> +
> +       | h chunk n k head res nextBytes |
> +       (h := self highBit) <= 48
> +               ifTrue: [^super atRandom: aGenerator].
> +       chunk := 1 << 48.
> +       res := self class new: self digitLength neg: false.
> +       n := h - 1 // 48.
> +       1 to: n do: [:i |
> +               nextBytes := (aGenerator nextInt: chunk) - 1.
> +               1 to: 6 do: [:j |
> +                       res digitAt: i - 1 * 6 + j put: (nextBytes
> digitAt: j)]].
> +
> +       k :=  h - (n * 48).
> +       chunk := 1 << k.
> +       head := self >> (n * 48).
> +
> +       [(nextBytes := (aGenerator nextInt: chunk) - 1) > head
> +               or:
> +                       [1 to: nextBytes digitLength do: [:j |
> +                               res digitAt: n * 6 + j put: (nextBytes
> digitAt: j)]].
> +                       res >= self] whileTrue.
> +
> +       ^res + 1!
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20130423/01011886/attachment.htm


More information about the Squeak-dev mailing list