Re: help number instruction
- To: mathgroup at yoda.physics.unc.edu
- Subject: Re: help number instruction
- From: withoff (David Withoff)
- Date: Tue, 28 Jun 1994 10:18:14 -0500
> Hello:
>
> I have a little problem. An error message of
> Mathematica says:
> 'External evaluation error at instruction 7 ...'
> How does Mathematica count the instructions?
> Which is the 7th instruction?
>
> Thank-you
>
> Jesus ROJO
> --
The best way to interpret this message is to look inside of
the list of pseudo-code instructions generated by Compile.
The message indicates the position of the instruction where
something went wrong. Here is an example
In[6]:= f = Compile[{{x, _Integer}}, x + 10]
Out[6]= CompiledFunction[{x}, x + 10, -CompiledCode-]
In[7]:= f[2147483637]
Out[7]= 2147483647
In[8]:= f[2147483638]
CompiledFunction::cfn:
Numerical error encountered at instruction 4; proceeding with uncompiled
evaluation.
Out[8]= 2147483648
In this example, f[2147483637] works fine, because 10 + 2147483637
is representable as a machine integer (it is less than 2^32-1),
while f[f[2147483638] generates an error, because 10 + 2147483638
is too large to be represented as a machine integer.
This shows the pseudocode instructions returned by Compile.
In[9]:= InputForm[f]
Out[9]//InputForm=
CompiledFunction[{_Integer}, {0, 3, 0, 0},
{{1, 17}, {3, 1, 0}, {12, 10, 1}, {32, 0, 1, 2}, {7, 2}},
Function[{x}, x + 10]]
The list of pseudo-code instructions is the third element in this
result. Here is an analysis of those instructions.
In[11]:= f[[3]] //ColumnForm
Out[11]= {1, 17} (* verify the version *)
{3, 1, 0} (* load integer argument at position 1 into
integer register 0 *)
{12, 10, 1} (* load the integer constant 10 into integer
register 1 *)
{32, 0, 1, 2} (* add integer register 0 to integer register 1
and put the result in integer register 2 *)
{7, 2} (* return the result in integer register 2 *)
The error happens at the fourth instruction, {32, 0, 1, 2}, where
the argument is added to the constant 10.
It is somewhat easier to make sense of these messages if you have
the list of pseudo-code instructions handy. This list is available
in various technical reports (I am right now reading from the course
notes "Numerical Computatin in Mathematica" that Jerry Keiper and I
wrote for the 1992 Mathematica conferences).
In most cases, figuring out these messages by poring over lists of
pseudocode instructions is sort of tedious. It is usually easier
to look at the code and think deep thoughts about whether or not
the compiled program can be handled using machine-sized quantitites,
whether or not there are square roots of negative numbers, and so forth.
Dave Withoff
Research and Development
Wolfram Research