Makes sense

Patched:

   JVERSION
Engine: j701/2011-02-23/15:25
Library: 7.01.045
Platform: Win 64
Installer: unknown
InstallPath: c:/users/joe bogner/downloads/jsrc/build


   >./ ? 1e7 # 2 1e7
9999999
    >./ ?. 1e7 # 2 1e7
9999999

Or

   # ~. ?. 1e7 # 2 1e7
6321511

   # ~. ? 1e7 # 2 1e7
6319820


Stock:
   JVERSION
Engine: j803/2014-10-19-11:11:11
Library: 8.04.13
Qt IDE: 1.4.6/5.4.2
Platform: Win 64
Installer: J804 install
InstallPath: c:/users/joe bogner/j64-804
     >./ ? 1e7 # 2 1e7
1
   >./ ?. 1e7 # 2 1e7
1


   # ~. ?. 1e7 # 2 1e7
2


   # ~. ? 1e7 # 2 1e7
2

On Thu, Dec 17, 2015 at 11:13 PM, bill lam <[email protected]> wrote:
> I think a more persuasive test to show the presence or absence
> of the bug is to roll over one million times something like
>
>    >./ ? 1e7 # 2 1e7
> 1
>    >./ ?. 1e7 # 2 1e7
> 1
>
>
> Чт, 17 дек 2015, Joe Bogner написал(а):
>> Sorry - I meant to add as a test case.... New code on 64-bit bit
>>
>>    JVERSION
>> Engine: j701/2011-02-23/15:25
>> Library: 7.01.045
>> Platform: Win 64
>> Installer: unknown
>> InstallPath: c:/users/joe bogner/downloads/jsrc/build
>>
>>    ?. 16 # 2 2 2 16
>> 0 0 0 1 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 0 0 1 0 0 1 1 0 0 1 1 1 0 1 0 
>> 0 0
>> 1 1 1 1 0 1 0 0 4 14 3 1 6 14 10 15 13 5 6 2 14 0 5 14
>>
>>    JVERSION
>> Engine: j803/2014-10-19-11:11:11
>> Library: 8.03.13
>> Platform: Win 32
>> Installer: J803 install
>> InstallPath: c:/users/joe bogner/downloads/j803_win32
>>    ?. 16 # 2 2 2 16
>> 1 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 1 1 1 1 
>> 1 0
>> 1 1 1 0 0 1 1 1 13 12 13 4 9 15 5 9 6 3 9 1 2 11 1 8
>>
>>  JVERSION
>> Engine: j803/2014-10-19-11:11:11
>> Library: 8.04.13
>> Qt IDE: 1.4.6/5.4.2
>> Platform: Win 64
>> Installer: J804 install
>> InstallPath: c:/users/joe bogner/j64-804
>>     ?. 16 # 2 2 2 16
>> 0 1 0 1 1 0 0 1 1 1 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0
>> 0 0 0 1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 1 1
>>
>>
>> On Thu, Dec 17, 2015 at 10:56 PM, Joe Bogner <[email protected]> wrote:
>> > looks like the problem likes in
>> > https://github.com/openj/core/blob/18fd23bbdc2f50770eb3047e978cd5e4e3b47039/vrand.c#L726
>> >
>> > It looks like it checks to see if the first number in the list is 2
>> > and if so, it uses the roll2 implementation
>> >
>> > RZ(w=vi(w)); m=*AV(w);
>> > if( 2==m)RZ(z=roll2 (w,&b));
>> >
>> > It also appears to be a 64-bit bug
>> >
>> > 32-bit:
>> >
>> >    ?. 16 # 2 2 2 16
>> > 1 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 1
>> > 1 1 1 1 0 1 1 1 0 0 1 1 1 13 12 13 4 9 15 5 9 6 3 9 1 2 11 1 8
>> >
>> > 64-bit
>> >       ?. 16 # 2 2 2 16
>> > 0 1 0 1 1 0 0 1 1 1 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0
>> > 0 0 0 1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 1 1
>> >
>> > The simplest 'fix' would be to disable the roll 2 optimization by
>> > commenting it out, but that may not be ideal since presumably it was
>> > put in place for a reason to speed up random booleans on large arrays.
>> > The next fix would be to check to see if all numbers in the ravel are
>> > 2 and only then use roll2. The last, probably more complicated fix
>> > would be to support 2 and other numbers in roll2 safely in 64-bit, but
>> > even that is pretty simple
>> >
>> >
>> > just copy and paste the block of shifts (since there is only 8), to
>> > add 8 more for 64-bit... need to do this for the random and fixed seed
>> > part
>> >
>> >  }else for(j=0;j<q;++j){
>> >   t=NEXT;
>> >   if(!(2==*v++&&2==*v++&&2==*v++&&2==*v++))R mark; *zv++=mk&t; t>>=1;
>> >   if(!(2==*v++&&2==*v++&&2==*v++&&2==*v++))R mark; *zv++=mk&t; t>>=1;
>> >   if(!(2==*v++&&2==*v++&&2==*v++&&2==*v++))R mark; *zv++=mk&t; t>>=1;
>> >   if(!(2==*v++&&2==*v++&&2==*v++&&2==*v++))R mark; *zv++=mk&t; t>>=1;
>> >   if(!(2==*v++&&2==*v++&&2==*v++&&2==*v++))R mark; *zv++=mk&t; t>>=1;
>> >   if(!(2==*v++&&2==*v++&&2==*v++&&2==*v++))R mark; *zv++=mk&t; t>>=1;
>> >   if(!(2==*v++&&2==*v++&&2==*v++&&2==*v++))R mark; *zv++=mk&t; t>>=1;
>> >   if(!(2==*v++&&2==*v++&&2==*v++&&2==*v++))R mark; *zv++=mk&t;
>> >
>> >  //start new code
>> >   #if SY_64
>> >   t>>=1;
>> >   if(!(2==*v++&&2==*v++&&2==*v++&&2==*v++))R mark; *zv++=mk&t; t>>=1;
>> >   if (!(2 == *v++ && 2 == *v++ && 2 == *v++ && 2 == *v++))R mark;
>> > *zv++ = mk&t; t >>= 1;
>> >   if (!(2 == *v++ && 2 == *v++ && 2 == *v++ && 2 == *v++))R mark;
>> > *zv++ = mk&t; t >>= 1;
>> >   if (!(2 == *v++ && 2 == *v++ && 2 == *v++ && 2 == *v++))R mark;
>> > *zv++ = mk&t; t >>= 1;
>> >   if (!(2 == *v++ && 2 == *v++ && 2 == *v++ && 2 == *v++))R mark;
>> > *zv++ = mk&t; t >>= 1;
>> >   if (!(2 == *v++ && 2 == *v++ && 2 == *v++ && 2 == *v++))R mark;
>> > *zv++ = mk&t; t >>= 1;
>> >   if (!(2 == *v++ && 2 == *v++ && 2 == *v++ && 2 == *v++))R mark;
>> > *zv++ = mk&t; t >>= 1;
>> >   if (!(2 == *v++ && 2 == *v++ && 2 == *v++ && 2 == *v++))R mark; *zv++ = 
>> > mk&t;
>> >   #endif
>> >  }
>> >
>> > On Thu, Dec 17, 2015 at 10:29 PM, Linda A Alvord
>> > <[email protected]> wrote:
>> >> These are the results you should get in a fresh version of JHS or jqt.  If
>> >> you use ?. you will insure repeated exact results in a session. In all 
>> >> cases
>> >> the length of the list is 64 elements so there should be enough 2's.
>> >>
>> >> ?. 16 # 2 2 2 16
>> >> 1 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 1 1 1 
>> >> 1
>> >> 1 0 1 1 1 0 0 1 1 1 13 12 13 4 9 15 5 9 6 3 9 1 2 11 1 8
>> >>    ?. 16 # 3 2 2 16
>> >> 0 2 2 1 2 0 2 1 1 2 0 2 1 1 1 2 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 1 
>> >> 1
>> >> 1 1 1 0 1 1 1 0 0 1 13 11 13 12 13 4 9 15 5 9 6 3 9 1 2 11
>> >>    ?. 16 # 16 2 2 2
>> >> 2 11 15 4 6 7 4 1 4 2 6 14 1 14 7 12 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 
>> >> 0 1
>> >> 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 0 1 0 1 1 1 1 0 1 1 1 0 1
>> >>
>> >>    $?. 16 # 2 2 2 16
>> >> 64
>> >>    $?. 16 # 3 2 2 16
>> >> 64
>> >>    $?. 16 # 16 2 2 2
>> >> 64
>> >>
>> >> Linda
>> >>
>> >> -----Original Message-----
>> >> From: [email protected]
>> >> [mailto:[email protected]] On Behalf Of 'Pascal
>> >> Jasmin' via Programming
>> >> Sent: Thursday, December 17, 2015 12:41 PM
>> >> To: [email protected]
>> >> Subject: Re: [Jprogramming] bug in ?
>> >>
>> >> ?.  2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
>> >> 2
>> >> 2 2 2 2 2 2 2 2 2 2 2 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
>> >> 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 
>> >> 1
>> >> 0 1 1 1 1 0 0 1 1 1 8 9 6 8 14 7 12 9 1 15 2 15 3 13 3
>> >>
>> >> ?. 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
>> >> 2 2
>> >> 2 2 2 2 2 2 2 2 2 2 2 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
>> >> 0 1 0 1 1 0 0 1 1 1 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 >> >> 0
>> >> 1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 1 1
>> >>
>> >>
>> >> one less leading 2 in first example.  47 leading 2s, correct result.  48
>> >> leading 2s and everything is 2.
>> >>
>> >>
>> >> ----- Original Message -----
>> >> From: Raul Miller <[email protected]>
>> >> To: Programming forum <[email protected]>
>> >> Sent: Thursday, December 17, 2015 12:28 PM
>> >> Subject: Re: [Jprogramming] bug in ?
>> >>
>> >> Consider
>> >>    ?.2 2 2 32
>> >> 0 1 0 18
>> >>
>> >> Thanks,
>> >>
>> >> --
>> >> Raul
>> >>
>> >>
>> >> On Thu, Dec 17, 2015 at 12:13 PM, 'Pascal Jasmin' via Programming
>> >> <[email protected]> wrote:
>> >>>
>> >>>
>> >>>
>> >>> ?. 16 # 2 2 2 16
>> >>>
>> >>>
>> >>> result is same as
>> >>>
>> >>> ?. 16 # 2 2 2 2
>> >>>
>> >>> ignores the request for 0-15 range random numbers.
>> >>>
>> >>>
>> >>> ----- Original Message -----
>> >>> From: Raul Miller <[email protected]>
>> >>> To: Programming forum <[email protected]>
>> >>> Sent: Thursday, December 17, 2015 12:10 PM
>> >>> Subject: Re: [Jprogramming] bug in ?
>> >>>
>> >>> On Thu, Dec 17, 2015 at 11:49 AM, 'Pascal Jasmin' via Programming
>> >>> <[email protected]> wrote:
>> >>>> ?. 16 # 2 2 2 16
>> >>>> 0 1 0 1 1 0 0 1 1 1 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 >> >>>> 0
>> >> 0 1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 1 1
>> >>>>
>> >>>>
>> >>>> ?. 16 # 3 2 2 16
>> >>>> 0 2 1 0 2 1 1 1 2 1 0 2 1 2 1 2 1 0 1 1 1 1 1 1 0 0 1 0 0 1 1 0 0 1 1 1 >> >>>> 0
>> >> 1 0 0 0 1 1 1 1 0 1 0 8 4 14 3 1 6 14 10 15 13 5 6 2 14 0 5
>> >>>>
>> >>>> The last 16 numbers in the first example should match the 2nd.
>> >>>
>> >>> Why do you say that?
>> >>>
>> >>> Thanks,
>> >>>
>> >>> --
>> >>> Raul
>> >>>
>> >>>
>> >>>
>> >>> ----------------------------------------------------------------------
>> >>> For information about J forums see http://www.jsoftware.com/forums.htm
>> >>
>> >>
>> >>
>> >>> ----------------------------------------------------------------------
>> >>> For information about J forums see http://www.jsoftware.com/forums.htm
>> >> ----------------------------------------------------------------------
>> >> For information about J forums see http://www.jsoftware.com/forums.htm
>> >> ----------------------------------------------------------------------
>> >> For information about J forums see http://www.jsoftware.com/forums.htm
>> >>
>> >> ----------------------------------------------------------------------
>> >> For information about J forums see http://www.jsoftware.com/forums.htm
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>
> --
> regards,
> ====================================================
> GPG key 1024D/4434BAB3 2008-08-24
> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to