Without seeing the definitions of f1 and f2, no-one is going to be able to say for sure what is going on. However, on many occasions, numerical round-off error has appeared systematic when I have worked on solving differential equations. For one thing, the precision tracking used in Mathematica is fundamentally different than the simple round-off used in machine precision. If you examine the following:
In[2]:= N[\[Pi],20]
Out[2]= 3.1415926535897932385
In[3]:= FullForm[%]
Out[3]//FullForm= 3.141592653589793238462643383279502884197169399375105820285`20.
You can see that in order to achieve 20 digits of accuracy in pi, Mathematica forces itself to use far more digits. This is fundamentally different than simply rounding off machine precision and hoping for the best. This could also yield apparently systematic differences for certain computations.