# Strange behavior when defining a symbol/function pointwise

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:= 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:= {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?

• Moral lesson: use exact numbers in the left-hand side of piecewise definitions. (I'm pretty sure this is a dupe; I just can't find it.) – J. M.'s ennui Jun 3 '15 at 10:00
• Related: (1072), (15907), (47988), (79130) – Mr.Wizard Jun 3 '15 at 18:07
• Proposed duplicate: (51997) – Mr.Wizard Jun 3 '15 at 18:07

## 1 Answer

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.}