Compiling Random Numbers from a distribution

• To: mathgroup at smc.vnet.net
• Subject: [mg84483] Compiling Random Numbers from a distribution
• From: Asim <maa48 at columbia.edu>
• Date: Fri, 28 Dec 2007 04:11:29 -0500 (EST)

```Hi

I am wondering why the following function works in Mathematica 6.01,
(notice, x is not a local variable in the function below)

v = Compile[{{mu, _Real}, {s, _Real}},
Module[
{m},
x = RandomReal[NormalDistribution[0.0, 1.0]];
m = 2 + x;
Clear[x];
m
]
]

In[19]:= v[0.0, 1.0]

Out[19]= 2.59192

but the compilation in the following function which makes the variable
x local to the function does not work

v1 = Compile[{{mu, _Real}, {s, _Real}},
Module[
{m, x},
x = RandomReal[NormalDistribution[0.0, 1.0]];
m = 2 + x;
m
]
]

as can be seen from the output from Mathematica 6.01 on windows

In[20]:= v1[0.0, 1.0]

During evaluation of In[20]:= CompiledFunction::cfse: Compiled \
expression NormalDistribution[0.,1.] should be a machine-size real \
number. >>

During evaluation of In[20]:= CompiledFunction::cfex: Could not \
complete external evaluation at instruction 3; proceeding with \
uncompiled evaluation. >>

Out[20]= 2.78038

I would appreciate it very much if someone can explain why this
happens. I would much prefer if the second function (v1) were able to
compile. I need to use random numbers from the normal distribution to
work in much more complicated functions, and I am not sure whether the
approach in the first function (v) is really fine.

Thanks

Asim Ansari

```