The answer may be that you use GCC on x86/x86_64, the calculations are not too complex, so the compiler optimizes them to be processed internally in 80-bit floating point registers which have long double
precision, thus giving you better results.
Or it may be that you use the word precision to describe absolute error, and when the actual values are on the order of 10-5 and the relative error is on the order of 10-16, the absolute error is on the order of 10-21.
Or something else, depending on the context. You see, the details are actually relevant.