Except that I expect people would try things like ?10^20x.  
Also ?1234x.

I have simplified my original expression to

vecarg=: 3 : 0
 m=. <.10^.B    NB. # decimal digits in base
 d=. ":y
 k=. m-m|-#d    NB. # decimal digits in leading digit
 (>.m%~#d) {.!.B (".k{.d)++./'0'~:k}.d
)

   vecarg 10^20x
1 10000 10000 10000 10000 10000
   vecarg 1234x
1234



----- Original Message -----
From: Henry Rich <[email protected]>
Date: Saturday, May 21, 2011 12:07
Subject: Re: [Jprogramming] roll
To: Programming forum <[email protected]>

> Looks sound to me.  I would think that
> 
> v =. (#t) {.!.B >: ".{.t
> 
> would suffice for v - the chance of all trailing 0s is small,
> and the benefit of detecting it also small.
> 
> Henry Rich
> 
> On 5/21/2011 2:40 PM, Roger Hui wrote:
> > Thanks.  I realize that.  After all, if ?1e6$12345
> > results in z=:_1e6$(<.1e6%12345)$i.12345,
> > z would satisfy the chi square test, KS test, etc.,
> > but we would (should) be highly suspicious of
> > the "RNG"!
> >
> > So I am depending on the fact that ?m generates
> > uniform random numbers as well as having
> > many other desirable properties.  In this case it does,
> > because ?m uses the Mersenne Twister.
> >
> >> For y an extended precision number, ?y is computed
> >> by t=.?y1 where y1 is a little bigger than y,
> >> repeating until t is less than y.  (The same y1
> >> is used for a given y.)
> >
> > In detail:
> >
> > B=: 10000x
> > rand=: 3 : 0
> >   m=.<.10^.B
> >   t=. (-m) ]\ ((m|-#t)$' '),t=.":y
> >   n=.<:#t
> >   c=. ".{.t    NB. leading digit
> >   v=. (c++./'0'~:,}.t),n#B
> >   whilst. y<:z do. z=. B#.?v end.
> > )
> >
> > B is the base for extended integers.  The loop
> > repeatedly does z=.B#.?v until y>z .  The
> > number B#.B|v is the y1 that I described.
> >
> > The bug in the interpreter was that it was
> > basically doing y<z instead of the correct y<:z .
> >
> > Examples:
> >
> >     11^20x
> > 672749994932560009201
> >
> >     rand 11^20x
> > 554374486617845425729
> >     rand 11^20x
> > 98359541759946207683
> >
> >     t=: rand"0 ]1e5$12345x
> >     >./t
> > 12344
> >     <./t
> > 0
> >     (c%12344) , (+/c>:t)%#t [ c=: ?12345
> > 0.225697 0.22524
> >
> >
> >
> > ----- Original Message -----
> > From: Henry Rich<[email protected]>
> > Date: Saturday, May 21, 2011 10:15
> > Subject: Re: [Jprogramming] roll
> > To: Programming forum<[email protected]>
> >
> >> Even if you know that the distribution of numbers from your RNG
> >> is
> >> uniform, that is not sufficient to ensure that there are not
> >> pernicious
> >> patterns in the numbers.
> >>
> >> For example: multiplicative congruence generators produce
> >> sequences that
> >> pass all sorts of tests, but it turns out that if you use sets
> >> of n
> >> sequential numbers produced by such an RNG to sample an n-
> >> dimensional
> >> space, the n-sets fall on hyperplanes of the n-dimensional
> >> space,
> >> leaving large areas unsampled.
> >>
> >> I don't know enough to offer any advice about picking an RNG for
> >> general
> >> use.  My one experience with this sort of thing was when I
> >> got some
> >> surprising results using a multiplicative congruence RNG, and
> >> replaced
> >> it with Knuth's suggestion, which at the time was to use two
> >> such RNGs,
> >> shuffling the results from one using the results of the other,
> >> and my
> >> results became reasonable.
> >>
> >> Henry Rich
> >>
> >> On 5/21/2011 11:30 AM, Roger Hui wrote:
> >>> Thanks for your reply.  To paraphrase Ewart Shaw,
> >>> my lack of depth in statistics is only ameliorated by
> >>> the narrowness of my understanding.  Regarding the
> >>> last result:
> >>>
> >>>>       -.14&chisqcdf f i.5
> >>>> 0.262214 0.120479 0.124215 0.292923 0.68203
> >>>
> >>> What are the numbers saying?  Do they indicate that the
> >>> underlying distribution is nearly uniform or far from uniform?
> >>> Is it a good or bad thing (or irrelevant) that the 5 numbers
> >>> are quite different from each other?
> >>>
> >>> In "school" I learned that the Kolmogorov-Smirnov test
> >>> http://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test
> >>> is good for this kind of thing.  What do you think of
> >>> this test?
> >>>
> >>>
> >>>
> >>> ----- Original Message -----
> >>> From: John Randall<[email protected]>
> >>> Date: Saturday, May 21, 2011 7:52
> >>> Subject: Re: [Jprogramming] roll
> >>> To: Programming forum<[email protected]>
> >>>
> >>>> The process described should yield uniform random numbers
> >>>> between 0
> >>>> and y-1.
> >>>>
> >>>> Following up on the tests in the original posting, we can 
> put the
> >>>> numbers into equal sized bins and then calculate a chi-square
> >>>> statistic.  If this is not significant, we can be somewhat
> >>>> assuredthat the numbers are random.
> >>>>
> >>>> f=:3 : 0"0
> >>>> y=. 12345
> >>>> t=. ?2e6$20000
> >>>> z=. 1e6 {. (12345>t)#t
> >>>> NB. 12345=15*823
> >>>> bin=.<.@%&823
> >>>> observed=.(bin z) #/. z
> >>>> expected=.(#z)%15
> >>>> chisquare=.+/(*:observed-expected)%expected
> >>>> )
> >>>>
> >>>> require '~addons/stats/base/distribution.ijs'
> >>>>
> >>>>       -.14&chisqcdf f i.5
> >>>> 0.262214 0.120479 0.124215 0.292923 0.68203
> >>>>
> >>>> Best wishes,
> >>>>
> >>>> John
> >>>>
> >>>>
> >>>>
> >>>> Roger Hui wrote:
> >>>>> I have found a bug in ?y where y is an extended
> >>>>> precision integer.  The result should never be y,
> >>>>> but:
> >>>>>
> >>>>>        t=: ? 1e6 $ 12345x
> >>>>>        +/t=12345
> >>>>> 89
> >>>>>
> >>>>> The last result should of course be 0.
> >>>>>
> >>>>> I know how this can be fixed, but I would like to
> >>>>> verify that the algorithm for ?y is correct with the
> >>>>> mathematicians in this forum.
> >>>>>
> >>>>> For y an extended precision number, ?y is computed
> >>>>> by t=.?y1 where y1 is a little bigger than y,
> >>>>> repeating until t is less than y.  (The same y1
> >>>>> is used for a given y.)  Assuming that ?m produces
> >>>>> uniform random numbers between 0 and m-1, does
> >>>>> this process give uniform random numbers between
> >>>>> 0 and y-1?
> >>>>>
> >>>>> For example, suppose we want to compute z=:?1e6$y=:12345.
> >>>>>
> >>>>>        y=: 12345
> >>>>>        t=: ?2e6$20000
> >>>>>        +/12345>t
> >>>>> 1233158
> >>>>>        z=: 1e6 {. (12345>t)#t
> >>>>>
> >>>>>        NB. various tests
> >>>>>        (+/z)%#z
> >>>>> 6170.3
> >>>>>        12344%2
> >>>>> 6172
> >>>>>
> >>>>>        (c%y) , 
> (+/c>:z)%#z [ c=: ? y
> >>>>> 0.993277 0.993333
> >>>>>        (c%y) , 
> (+/c>:z)%#z [ c=: ? y
> >>>>> 0.43872 0.438943
> >>>>>        (c%y) , 
> (+/c>:z)%#z [ c=: ? y
> >>>>> 0.593925 0.594519
> >>>>>        (c%y) , 
> (+/c>:z)%#z [ c=: ? y
> >>>>> 0.315674 0.315579

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to