Confused by (apparent) inconsistent precision


$$ e^{\pi \sqrt{163}} \approx 262537412640768743.99999999999925 $$

E^(Pi Sqrt[163.0])
N[E^(Pi Sqrt[163.0]), 35]
NumberForm[E^(Pi Sqrt[163.]), 35]



That's not the 35 digits I expected. OTOH,

N[Pi* E, 35]

returns 35 digits,


but then

NumberForm[Pi*E*1., 35]

again doesn't:


So I'm confused. Why doesn't one N[] what the other one does? In the documentation:

NumberForm[ expr, n ]
prints with approximate real numbers in expr given to n-digit precision.

I read this three times, slowly, went for a cup of tea, and read it again. But 15 isn't 35, or is it?


Posted 2012-09-14T10:04:41.893

Reputation: 6 446

1It is, for sufficiently large values of... Okay, the issue, as stated in the response below, is that you cannot get more correct digits after the fact. To obtain 35 digits, use N[] on an exact input, not one that already contains approximate numbers of lower precision. – Daniel Lichtblau – 2012-09-14T14:31:29.940

@Daniel - Thanks for the feedback. Are you referring to my 163.0 instead of 163? To be honest, I don't know why I wrote it that way :-/ – stevenvh – 2012-09-14T14:35:15.060

1Yes, I meant 163.0 was, in effect, polluting the input with machine precision. – Daniel Lichtblau – 2012-09-14T14:36:02.707



The documentation states:

N does not raise the precision of approximate numbers in its input

163.0 (or 163., or 163`) is a machine precision number, and Mathematica will not fake a higher precision when a certain number of digits are requested with N.

See this answer and this tutorial for more.

These questions may also be of interest:

Converting to machine precision

Annoying display truncation of numerical results


Posted 2012-09-14T10:04:41.893

Reputation: 259 163

@stevenvh In keeping with Mr.Wizard's advice, you may wish to compare using 163 (without the decimal point) in your code. – DavidC – 2012-09-14T13:58:51.957