https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120747
--- Comment #18 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Filip Kastl from comment #17) > (In reply to Andrew Pinski from comment #15) > > So it looks like (a * b) are closer in value to (vnb12 * 1.2e+1 - c) than > > (vnb12 * 1.2e+1) is to (a * b - c) . > > Btw, for the purpose of me trying to get better at debugging similar things, > how did you figure this out? Did you perhaps run gromacs in a debugger and > looked at what values those variables usually have? Or did you figure this > out from gromacs' source files? It is more understanding how floating point works and gave a rounding step. And that fma does the multiple and addition in infinite precision and only rounds at the end.