Say you have un=an-bn and you want sum(un)
lim an -> 1 when n -> infinity so the sum of P terms tends to P+cte_a, same for bn, the sum tends to P+cte_b
When you differentiate the two, (P+cte_a) - (P+cte_b), you should mathematically retrieve sum(un).
But with floating point, that's not what happens, because (P+cte_a) is rounded to nearest float. And the bigger P is, the less float(P+cte_a)-float(P) will be close to cte_a...
To convince yourself, try to evaluate these ops:
10.0f+0.1f-10.0f
100.0f+0.1f-100.0f
...
1.0e7f+0.1f-1.0e7
lim un -> 1/n when n -> infinity, so program 1 does a bit better...