[squeakdev] The Trunk: Kernelbf.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/Kernelbf.899.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: Kernelbf.899
>>> Author: bf
>>> Time: 10 February 2015, 4:37:05.988 pm
>>> UUID: 1cc7d0c60a3d457f9609fa508d11310e
>>> Ancestors: Kerneleem.898
>>>
>>> Fix random for Really Large Integers.
>>>
>>> =============== Diff against Kerneleem.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 Squeakdev
mailing list
