Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am trying to create a simple interpolation of 1-Exp[-x^2] function, over the logarithmic grid, but I am stuck due to some unexpected behaviour:

(*grid creation:*)
grid = Table[10.0^-10*Exp[5*i], {i, 0, 10}];
(*grid: function vs. variable*)
Table[{grid[[i]], am[grid[[i]]]}, {i, 1, 10}]
{{1.*10^-10, 0.}, {1.48413*10^-8, 2.22045*10^-16}, {2.20265*10^-6, 4.85167*10^-12}, 
   {0.000326902, 1.06865*10^-7}, {0.0485165, 0.00235108}, {7.20049, 1.},
   {1068.65, 0.9999999999999999999999999999999999999999999999999......}}

and here Table is stuck. The problem occurs at large values of the variable grid[[7]].

It seems like 1-Exp[-x^2] cannot provide a stable result at large values of the argument.

Of course I can define a conditional expression like If[x>...,1,1-Exp[-x^2]] but I am eager to know how to treat this problem properly, since I work a lot with such unstable functions and need to to know how to prevent it in the future.

share|improve this question

Note the change in first operation, from 10.0 to 10. This allows full arbitrary precision. Surrounding the final result in N gets you a numeric result with specified precision.

grid = Table[10^-10*Exp[5*i], {i, 0, 10}];

am[x_] := 1 - Exp[-x^2];

N[Table[{grid[[i]], am[grid[[i]]]}, {i, 1, 10}], 6]

share|improve this answer
you are right, but if I need a Real number instead of 10^(-10), for example 6.35^{-15}, then your suggestion will not work. There is something intrinsic in this approach which I do not get. – Arnold Klein May 12 '14 at 9:31
@A.K.: Take a look at precision/accuracy related questions here, and in the documentation. Bottom line is if a number is specified with low precision (e.g. by giving only a small number of decimals), and not otherwise marked or massaged to higher precision (e.g. using 635/10*10^(-15) in your comment example), you'll get underflow with the kinds of calculations your doing. – ciao May 12 '14 at 9:40
A number can be converted to an exact number using Rationalize. x1 = Rationalize[6.35^(-15), 0] returns 37/40719984446690 – Bob Hanlon Jun 11 '14 at 19:02

Your Answer


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.