       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:= Random[NormalDistribution[1, 2], 25]
Out= 0.23230352490529443816318603637908270412

Cheers,
Paul

```

• Prev by Date: Re: Could this be improved?
• Next by Date: Re: NoteBook Styles in 4
• Previous by thread: Re: Extended Random Function