Hi,
This is a rounding problem, depending on the precision of the float-values.
You can't assume every value below 1E-16 to be zero, because this kind of floatingpoint problems occur typically 14-16 digits behind the first significant digit of your values. If you do calculations with larger numbers, the problem will show up above 1E-16.
It is hard to tell exactly how large the rounding errors are going to be on complex calculations. There is always the danger of getting much larger errors if very large and very small values are involved in one calculation.
Example:
1234567890.1-1234567890 gives 0.0999999046325684
The roundig error is already dangerously close to the first significant digit of the result. If you do additional calculations with the result, the error can get large enough to produce completely wrong results. In most cases, this is not an issue, but as always, it is a good idea to take care of possible errors.