MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Using a huge list of random numbers from

  • To: mathgroup at
  • Subject: [mg127744] Re: Using a huge list of random numbers from
  • From: Roland Franzius <roland.franzius at>
  • Date: Sat, 18 Aug 2012 03:44:43 -0400 (EDT)
  • Delivered-to:
  • Delivered-to:
  • Delivered-to:
  • Delivered-to:
  • References: <k0ksoc$66d$>

Am 17.08.2012 09:44, schrieb kbru157 at
> I am doing some simulation which requires the use of random numbers.  I do not want to use pseudo-random numbers.  Instead I intend to download some of the binary files from
> How do I use these digits within mathematica 8.0? (Subsidiary question:  How would one convert these binary digits into deimal fractions?)

To use these 0-1 Random Digits directly makes sense only in the creation 
process of a Random Number Generator.

For instance, you can add a large number N of
a*(0-1 Digits) -1 + b
in order to obtain a normal distribution with mean b and variance ~ N a.

Download eg. the 2012-07-22.txt file into your user directory and open 
it in Mathematica as an input stream

ips = OpenRead["C:\\Users\\MeTheUser\\Downloads\\2012-07-22.txt"]

Now you can start making experiments. The following examples interpret 
the stream as integers of fixed lenght 64bit with 50:50 distribution of 
binary digits. 0 and 1 are ASCII coded as characters by charcter code 48 
and 49.

input = FromDigits[#, 2] & /@
    Flatten /@ Partition[ReadList[ips, {Byte}, 1024], 64];

The -1,1- random generator is implemented as

choose[n_]:= 2*(Flatten@ReadList[ips, {Byte}, n] - 48-1/2);

 From this you can construct an Gaussian generator by

gauss[n_]:= Plus@@choose[n]

A (0,1)-uniform generator is

uniform[n_] :=
  N[Table[2^(-k), {k, 1, n}].Flatten[ReadList[ips, {Byte}, n]] - 48]

Here effectively each 0-1 is used to decide, if the resulting number 
goes to the left or right half of the next 2^-n subdivison intervall on 
(0,1) (1/2,1) (1/2,3/4) ... .

Using the uniform generator you can easily implement each distribution 
with cumulative distribution function F:  F(x) = Prob[ Variable <x ]


random:= InverseFunction[F][uniform[64]]

But be careful using a binary digits fixed length generator:
It has a fixed lattice structure.
Your problem should be insensitive to that length scale. But you can use 
another random generator in order to decide the length of the binary 
digit string to use.


Roland Franzius

  • Prev by Date: TimeValue around NDSolve
  • Next by Date: Re: NDSolve bug?
  • Previous by thread: Using a huge list of random numbers from
  • Next by thread: Re: Using a huge list of random numbers from