[squeak-dev] The Trunk: Kernel-bf.899.mcz

Chris Muller asqueaker at gmail.com
Thu Feb 12 18:59:26 UTC 2015


Maybe adopt one of the ones from the Cryptography package?

On Thu, Feb 12, 2015 at 12:52 PM, Levente Uzonyi <leves at elte.hu> wrote:
> On Tue, 10 Feb 2015, Bert Freudenberg wrote:
>
>> On 10.02.2015, at 15:37, commits at source.squeak.org wrote:
>>>
>>>
>>> Bert Freudenberg uploaded a new version of Kernel to project The Trunk:
>>> http://source.squeak.org/trunk/Kernel-bf.899.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: Kernel-bf.899
>>> Author: bf
>>> Time: 10 February 2015, 4:37:05.988 pm
>>> UUID: 1cc7d0c6-0a3d-457f-9609-fa508d11310e
>>> Ancestors: Kernel-eem.898
>>>
>>> Fix random for Really Large Integers.
>>>
>>> =============== Diff against Kernel-eem.898 ===============
>>>
>>> Item was changed:
>>>  ----- Method: Random>>nextInt: (in category 'accessing') -----
>>>  nextInt: anInteger
>>>         " Answer a random integer in the interval [1, anInteger].
>>> anInteger should be less than 16r80000000. "
>>>
>>>         anInteger strictlyPositive ifFalse: [ self error: 'Range must be
>>> positive' ].
>>> +       "avoid Float arithmetic in #next to work with LargeInts"
>>> +       ^ ((seed := self nextValue) asInteger * anInteger // M asInteger)
>>> + 1!
>>> -       ^ (self next * anInteger) truncated + 1!
>>
>>
>>
>> We might want to do something better if anInteger > 16r80000000, because
>> that's the maximum number of different random integers we can produce. We
>> would need to call nextValue twice (or more times) to produce enough
>> randomness.
>
>
> Fetching more bits from the generator won't be better. This generator has 31
> bits internal state, so it can't generate longer random numbers.
> We need a better PRNG.
>
> Levente
>
>
>>
>> My fix just solves the immediate problem of running into infinite Floats.
>>
>> - Bert -
>>
>>
>>
>>
>


More information about the Squeak-dev mailing list