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>
- Reply-to: kuska at informatik.uni-leipzig.de
- Sender: owner-wri-mathgroup at wolfram.com
Hi,
a) a MarsagliaZaman 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 MarsagliaZaman subtractwithborrow 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[1]:=
> SeedRandom[5]
>
> In[2]:=
> x = Random[]
>
> Out[2]=
> 0.786599
>
> In[3]:=
> count = 1;
>
> In[4]:=
> 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[5]:=
> 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