       Re: Period of Random and big integers as iterators

• To: mathgroup at smc.vnet.net
• Subject: [mg40097] Re: Period of Random and big integers as iterators
• From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
• Date: Thu, 20 Mar 2003 03:33:15 -0500 (EST)
• Organization: Universitaet Leipzig
• References: <b59a5b\$sbb\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Hi,

a) a Marsaglia­Zaman generator with 24 bit mantissas has a
period of 2^144. If you assume, that a single test in your
loop take 10^(-4) seconds your method for finding the period will
run only 7 * 10^31 years and I recommend a very robust and stable
computer for this experiment. Send me a mail if it is finished !

b) you can use For[] to use iterators larger
than a 32 bit signed integer.

For[i = 2^31 - 1, i < 2147483669, i++,
If[Mod[i, 2] == 0, Print[i]]; 1];

The larger speed of a Do[]
function comes form the usage of machine integers

Regards
Jens

lsczan at concentric.net wrote:
>
> Hi,
>
> Mathematica's documentation offers this description for the implementation of
> Random:
>
> - Random uses the Wolfram rule 30 cellular automaton generator for
> integers.
> - It uses a Marsaglia­Zaman subtract­with­borrow generator for real
> numbers.
>
> Random is relatively fast. On my machine it it takes 0.321 s to
> compute 10^6 (pseudo) random numbers. I am interested how long is the
> period for the algorithm used by Random. If the period is, say 2^32,
> then my machine would exhaust it in 2^32/10^6 0.321 / 60 = 22.9781
> minutes. I made an experiment that apparently exposes some limitations
> of Mathematica.
>
> In:=
> SeedRandom
>
> In:=
> x = Random[]
>
> Out=
> 0.786599
>
> In:=
> count = 1;
>
> In:=
> While[True,
>       count++;
>       If[Random[]== x, Print[count]; Break[]]]
>
> Internal counter overflow.
> Some expression evaluations may not run to their
> final fixed points.  Try redoing your computation
> on a 64-bit enhanced version of Mathematica.
>
> It looks like While can go through a limited number of loops.
> Similarly, I got the following error for Do.
>
> In:=
> Do[1, {2147483648}]
>
> Do::iterb: Iterator {2147483648} does not have appropriate bounds.
>
> Apparently, the maximum value for the iterator is 2^31-1 = 2147483647,
> because
>     Do[1, {2147483648-1}]
> actually works.
>
> Does anybody know:
>
> 1. What is the period for Random[]?
>
> 2. Is it possible to use big integers as iterators in Mathematica?
>
> Thanks,
>
> LS

```

• Prev by Date: Mathematica Developer Conference in April 2003
• Next by Date: RE: RE: Increase in efficiency with Module
• Previous by thread: Period of Random and big integers as iterators
• Next by thread: Trouble with an iterative function