2

I am well aware of the fact that floating point number have finite precision, so one needs to be careful when comparing them. Still, I find it disturbing/surprising that the following input into Mathematica 9.0.1.0

 In[1]:= f[0.2] = 1;
         f[0.25] = 2;
         f[0.3] = 3;
         f[0.35] = 4;
         f[0.4] = 5;
         f[0.45] = 6;
         f[0.5] = 7;
         Table[f[t], {t, 0.2, 0.5, 0.05}]
         InputForm[%]4

leads to the output

Out[2]:= {1, 2, 3, f[0.35], 5, 6, 7}
         {1, 2, 3, f[0.35000000000000003], 5, 6, 7}

Somehow 0.35 seems to be a different from the other values.

is there a way to define f pointwise to make the above example work as one would naively expect?

cgogolin
  • 415
  • 3
  • 8

1 Answers1

1

One way to guard against this kind of thing is to use an interpolating function:

x = {0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5};
fx = {1, 2, 3, 4, 5, 6, 7};
f = Interpolation[Transpose[{x, fx}]]
Table[f[t], {t, 0.2, 0.5, 0.05}]

{1., 2., 3., 4., 5., 6., 7.}
bill s
  • 68,936
  • 4
  • 101
  • 191