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

Levente Uzonyi leves at elte.hu
Thu Feb 12 18:52:38 UTC 2015


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