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