Re: Using a huge list of random numbers from random.org
- To: mathgroup at smc.vnet.net
- Subject: [mg128351] Re: Using a huge list of random numbers from random.org
- From: jarek at miszczak.eu
- Date: Tue, 9 Oct 2012 00:37:27 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <k0ksoc$66d$1@smc.vnet.net> <k0nht1$b39$1@smc.vnet.net>
On Saturday, August 18, 2012 9:57:21 AM UTC+2, Roland Franzius wrote: > Am 17.08.2012 09:44, schrieb kbru157: > > > 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 random.org > > > http://www.random.org/files/ > > > 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 > > > > Close[ips] > > 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 ] > > > > by > > > > 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 I was wondering if it is possible to read some fixed number of bits (eg. 5) from the file with random data. I tried to use Import with "Bit" specification for this purpose, but this seams to be very slow. Are there any other methods to read from file bit-by-bit? Best, Jarek Miszczak