|
|
Up |
|
|
  |
Author: oblivio_noblivio_n Date: Jan 15, 2007 06:37
Hi everyone,
I developed a 256-state cellular automaton that serves as a random
number generator. It's more than three times faster than the GNU
Scientific Library RNGs I tested (taus, gfsr4, mt19937, and ranlxd1)
and scores very well on the Diehard tests.
It's fast because the algorithm is basically an array lookup with
pointer value updates.
Alas, there is no proof about cycles or such, but the statistical
results so far are very good. Enjoy.
Code and results are here:
http://home.southernct.edu/~pasqualonia1/ca/report.html
Tony Pasqualoni
|
| |
|
| | 3 Comments |
|
  |
Author: Bob JenkinsBob Jenkins Date: Jan 24, 2007 00:23
On Jan 15, 6:37 am, oblivi...@ yahoo.com wrote:
> Hi everyone,
>
> I developed a 256-state cellular automaton that serves as a random
> number generator. It's more than three times faster than the GNU
> Scientific Library RNGs I tested (taus, gfsr4, mt19937, and ranlxd1)
> and scores very well on the Diehard tests.
>
> It's fast because the algorithm is basically an array lookup with
> pointer value updates.
>
> Alas, there is no proof about cycles or such, but the statistical
> results so far are very good. Enjoy.
>
> Code and results are here:
>
> http://home.southernct.edu/~pasqualonia1/ca/report.html
>
> Tony Pasqualoni
|
| Show full article (1.40Kb) |
|
| | 2 Comments |
|
  |
Author: oblivio_noblivio_n Date: Jan 25, 2007 10:15
Bob,
Thank you for your feedback. I ran Diehard on 100 million integers that
were generated using a seed value of 2 and the results were good
(overall p-value of 0.809291). If there were such short cycles, I think
Diehard would reflect that, unless I'm misunderstanding something. In
any case, I designed the seed algorithm based on trial and error. Most
likely there are better algorithms.
Tony Pasqualoni
On Jan 24, 3:23 am, "Bob Jenkins" burtleburtle.net> wrote:
> On Jan 15, 6:37 am, oblivi...@ yahoo.com wrote:
>
>
>
>> Hi everyone,
>
>> I developed a 256-state cellular automaton that serves...
|
| Show full article (1.93Kb) |
| 1 Comment |
|
  |
|
|
  |
Author: VendVend Date: Jan 26, 2007 01:50
>> More generally,
>> if (cell_a == first_cell) {
>> *cell_a = rule[*cell_a];
>> implies the low byte of 2056*i+2055 will be walking through your rule[]
>> table. That always has a cycle length of 169, or 27, or 4 or 3 or 2 or
>> 1, depending on your seed.
Tony, it's not a matter of seeding I think.
If you apply a permutation on a value, and then keep applying the same
permutation on the results, you'll eventually get back the original
value. As Bob pointed out, that's what your are doing in your algorithm
with the first cell.
Perhaps it would be better to make the cell list cyclic, that is, to
add the value of the last cell to the first cell.
|
| |
| no comments |
|
RELATED THREADS |
  |
|
|
|