> On 07 Oct 2016, at 21:28, Patrick R. Michaud <[email protected]> wrote:
>
> On Fri, Oct 07, 2016 at 12:18:43PM -0700, Aaron Sherman wrote:
>> [15:12] <harmil_wk> m: say ((2**80) ..^ (2**81)).pick.base(2)
>> [15:12] <+camelia> rakudo-moar 605f27:
>> OUTPUT«100011101100100110010000000000000000000000000000000000010101111110101101010011001»
>>
>> The middle part is always a large number of zeros, but it's my
>> understanding that it should be a more uniform and continuous range of
>> results.
>
> Awesome catch! The current implementation of Range.pick() is based on
> Range.roll(), which uses nqp::rand_I() to choose a random value from
> an integer range.
>
> I'm guessing nqp::rand_I() is returning a 32-bit number, and so Range.pick/
> Range.roll are actually only returning values from 2**80 to 2**80+2**32-1 .
$ 6 'use nqp; say "$_: {nqp::rand_I(2**$_,Int).base(2)}" for 58 .. 65'
58: 1111001001001110101010001110011
59: 1001111001110100011111001011100
60: 11001111001100000101100000011
61: 10110000111000000101110101010
62: 1000000000000000000000000000000111100110101101101110111001101
63: 101000000000000000000000000000000001010101010110011001001111000
64: 1001000000000000000000000000000000101100110111100001110010111100
65: 10100000000000000000000000000000001101111110111111010001100001100
$ 6 'use nqp; say "$_: {nqp::rand_I(2**$_,Int).base(2)}" for 120 .. 130'
120:
1011010110010100011000000000010000000000000000000000000000000010000000101100000000111011111
121:
1101110011110100000000010011101000000000000000000000000000000001011101111100111110000010101
122:
11000000000000000000000000000000001011101110000000000100001110000000000000000000000000000001011101010011010100010000100100
123:
101000000000000000000000000000001111100100000101100100000010100000000000000000000000000000001101110000111011101100011101000
124:
1000110000101010010001010110101000000000000000000000000000000010101100110011011110100000101
125:
1111000000000000000000000000000000101001001101011110000111111000000000000000000000000000000000010000100001100111010111101011
126:
100001000000000000000000000000000001010000101011010110011100110000000000000000000000000000000000101000010100011010100110110001
127:
1101111000000000000000000000000000001010111001110011101110110000000000000000000000000000000000000010111111111010010101100111101
128:
100100000000000000000000000000000001001001011000011110111101111011000000000000000000000000000000111100101100011001100111100000
129:
111111100000000000000000000000000000001110010111010100011101000100111000000000000000000000000000001101111100100000001000101100001
130:
10111001000000000000000000000000000001111101011011110000101011100001000000000000000000000000000000000101001100110111101000011101
Feels slightly more complicated than that. But there’s definitely some
32bitness involved.
Liz