https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115362
--- Comment #20 from Jon Daniel <jondaniel879 at gmail dot com> --- float s = storage<float, 3>::dot(a.pinr(i), b.pinr(i), c.pinr(i)); float t = storage<float, 3>::dot(a.pinr(j), b.pinr(j), c.pinr(j)); return s-t; g++ interchanges the operands s-t with t-s: -575-142=-717 != 142-(-575)=717 causing the wrong sub/add.