MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: BesselZeros and Working Precision?

> I'm puzzled by why the four alternative forms
>       BesselJZeros[0,  1][[1]]
>       N[ BesselJZeros[0,  1][[1]], 12]
>       BesselJZeros[0,  1,  WorkingPrecision ->12][[1]]
>       N[ BesselJZeros[0, 1, WorkingPrecision ->12][[1]], 12]
> all give the same 6-digit answer, namely 2.40483

All of these results are machine numbers (roughly 16 digits).
Machine numbers display with six digits by default, and since the
first six digits of these results are all the same, the digits that are
shown by default are all the same.

The N function has no effect in these examples.  The first two results
are identical, and the last two results are identical.  The first two results
differ from the last two results beause of the settings of the
WorkingPrecision option.

N[expr, 12] does not convert the machine number to a variable-precision
number so that it can throw away the last four digits. It just returns the
original machine number.  If you really want to throw away the last four
digits of the 16-digit machine numbers to get 12-digit number, you can
use SetPrecision to do that.

The WorkingPrecision option specifies the precision that will be used for
internal calculations. It does not, at least not directly, specify anything
about the precision of the result.  Since the AccuracyGoal option has been
left at the default AccuracyGoal -> Automatic, the accuracy goal is set
to six digits less than the setting of the WorkingPrecision option.
This is how essentially all standard Mathematica numerical functions are
designed.  If the tolerance options are set to Automatic, those tolerances
are set six to ten digits less than the working precision.

With the working precision reduced below the default WorkingPrecision -> 16,
the accuracy goal is also reduced, so the results with WorkingPrecision -> 12
will have less accuracy than the default, but they still have six digits of
accuracy, so the six digits displayed will be the same.

> I'm also *really* puzzled by why
>       BesselJZeros[0, 1, WorkingPrecision -> 6][[1]]
>  gives the *one*-digit answer "0".

Setting WorkingPrecision -> 6 and leaving AccuracyGoal -> Automatic
gives an accuracy of zero (six digits less than the working precision),
so you get a result with an accuracy of zero.

> Actually, here's a table of  BesselJZeros[0, 1, WorkingPrecision -> k][[1]] for 
> k from 1 to 30.  Note erroneous answers at k = 7 and 8 also.
>         {"1", "0"},
>         {"2", "0"},
>         {"3", "0"},
>         {"4", "0"},
>         {"5", "0"},
>         {"6", "0"},
>         {"7", "2.398095666212098`"},
>         {"8", "2.404944945798332`"},
>         {"9", "2.404825723910026`"},

The result at k=7 (WorkingPrecision) corresponds to AccuracyGoal->1,
and the result at k=8 corresponds to AccuracyGoal -> 2.  Both of those
results meet the specified accuracy goals, as do the remaining results
in the table.

It would be reasonable to suggest that BesselJZeros[0, 1, WorkingPrecision -> 6]
should simply have abandoned the calculation, for consistency with

In[1]:= BesselJZeros[0, 1, AccuracyGoal -> 0]

Out[1]= BesselJZeros[0,1,AccuracyGoal -> 0]

since that is effectively what BesselJZeros[0, 1, WorkingPrecision -> 6] 
is specifying.

Dave Withoff
Wolfram Research

  • Prev by Date: RE: Help with 3D graphics
  • Next by Date: MathGL3D problem.....
  • Previous by thread: BesselZeros and Working Precision?
  • Next by thread: Re: BesselZeros and Working Precision?