Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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?

share|improve this question
    
Related: (3152), (10624), (13005) –  Mr.Wizard Jan 14 '13 at 13:35

1 Answer 1

up vote 5 down vote accepted

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.

share|improve this answer
    
@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

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.