# Adding precision for the calculation of a function

I have some function $f(x)$ I wish to evaluate, which is yielding divide-by-zero errors for sufficiently large inputs. How do I increase the precision with which this function is evaluated in order to prevent this? Can I do this while also plotting the function?

-
Related: (3152), (10624), (13005) –  Mr.Wizard Jan 14 '13 at 13:35

Straight from the Mathematica documentation of SetPrecision

bit = Log[10., 2.];
f[x_] := Module[{p = Precision[x], lx},
lx = Block[{$MaxPrecision = p,$MinPrecision = p},4*x*(1 - x)];
SetPrecision[lx, p - bit]]


then testing

x0 = N[1/3, 20];
fl = NestList[f, x0, 20]


As mentioned in the comment of your question, those related questions has got tons of tricks about precision management in Mathematica. I should be a bit more explanatory with my answer here.

Problem:

Lets evaluate this code.

{Sin[Exp[200.]], a + 2 b + 3 c, Sin[Exp[200]] > 0}


{-0.89766,a+2 b+3 c,Sin[E^200]>0}

the above result comes with a error as the logical positivity test fails.

N::meprec: "Internal precision limit $MaxExtraPrecision = 50. reached while evaluating -Sin[E^200]."  Now an easy solution here will be to extend Mathematica's precision using the key $MaxExtraPrecision. This can be done in a Block[] construct to not have a global effect on the kernel.

Block[{\$MaxExtraPrecision = 150},
{SetPrecision[#, 30] & /@ {N[Sin[Exp[200]], {Infinity, 30}],
a + 2 b + 3 c},
Sin[Exp[200]] > 0}]


{{-0.815597574752651427792149914303,a+2.00000000000000000000000000000b+3.00000000000000000000000000000 c},False}

One needs to be clear with the expression N[Sin[Exp[200]], {Infinity, 30}] where Infinity is the Precision and 30 is accuracy requested for the expression Sin[Exp[200]]`.

You can use the block construct as above to define your function that require extra precision.

-
@Mr.Wizard I added a bit from my limited understanding ;) Thx for the suggestion. Anybody please feel free to edit the answer to make it more useful and informative. –  PlatoManiac Jan 14 '13 at 15:24
Thanks for the addition. –  Mr.Wizard Jan 14 '13 at 15:25