Random[Real,{0,1},\$MachinePrecision] isn't MachineNumber[] ???!!

• To: mathgroup at christensen.cybernetics.net
• Subject: [mg884] Random[Real,{0,1},\$MachinePrecision] isn't MachineNumber[] ???!!
• From: pehowland at taz.dra.hmg.gb (Paul E. Howland)
• Date: Fri, 28 Apr 1995 00:41:45 -0400
• Organization: Defence Research Agency

```I've experienced the following problem with Mathematica V2.2.4 for
OSF/1.  I'm writing a package, and want to be able to pass the desired
precision as an option.  This will be used, amongst other things, to
generate a Random[] number of the desired precision.  If the machine's
own precision is being used I want to use a Compile[]'ed function on
the random number, otherwise I want to use a pure Function[].

When I generate a random number, with machine precision, as below
In[1] := Random[Real,{0,1},\$MachinePrecision]
Out[1] := 0.3739679783533225
and then apply a Compile[]'ed function to it, Compile[] complains with
CompiledFunction::cfr: Argument `1` at position 1 should be a machine
sized real number.

In[2] := MachineNumberQ[%1]
Out[2] := False

!@@?!##\$%

If using \$MachinePrecision with Random[] doesn't give me a MachinePrecision
number, what does?!

However, if I use:
In[3] := N[Random[Real,{0,1}],\$MachinePrecision]
Out[3] := 0.98857067609012
In[4] := MachineNumberQ[%]
Out[4] := True

Note that In[1] gives me a number with 16 digits after the decimal, and
In[3] gives me a number with 14 digits after the decimal.  However,
the Precision[] of both is claimed to be 16, and \$MachinePrecision is
also claimed to be 16.

I'm confused!

Paul Howland