Re: Extended Random Function
- To: mathgroup at smc.vnet.net
- Subject: [mg21782] Re: Extended Random Function
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Thu, 27 Jan 2000 22:57:05 -0500 (EST)
- Organization: University of Western Australia
- References: <85mk1o$1ag@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Daniele wrote:
> I have a question concerning the use of the
> extension of the Random[] function as defined in
> the Statistics`ContinuousDistributions`. With
> this extension it is possible to pick a random
> number according to a given distribution function.
>
> My question is: how is it possible to pick a Real
> number with n digits? With the default function
> it is possible to do so by calling
>
> Random[Real,{xmin,xmax},ndigits]
If you look through the code in Statistics`ContinuousDistributions` or
Statistics`NormalDistribution` you will see that machine-precision is
used. E.g.,
normal = Compile[{{mu, _Real}, {sigma, _Real}, {q1, _Real}, {q2,
_Real}},
mu + sigma Sqrt[-2 Log[q1]] Cos[2Pi q2] ]
NormalDistribution/: Random[NormalDistribution[mu_:0, sigma_:1]] :=
normal[mu, sigma, Random[], Random[]]
and there is no option for specifying n digits. Note also that Compile
requires the
use of machine-precision.
You could modify such functions as follows:
normal = Function[{mu, sigma, q1, q2}, mu + sigma Sqrt[-2 Log[q1]]
Cos[2Pi q2]];
replacing Compile with Function and removing the "argument typing",
NormalDistribution/: Random[NormalDistribution[mu_:0, sigma_:1],
ndigits_] :=
normal[mu, sigma, Random[Real, {0, 1}, ndigits], Random[Real, {0,
1}, ndigits]]
adding an extra argument to NormalDistribution and modifying the calls
to Random.
For example,
In[1]:= Random[NormalDistribution[1, 2], 25]
Out[1]= 0.23230352490529443816318603637908270412
Cheers,
Paul