https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93112
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org, | |jsm28 at gcc dot gnu.org --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- With -fexcess-precision=standard on ia32 floating point is evaluated in long double precision and in that case 1.034567 is actually 1.03456699999999999996149607772721878973243292421102523804e+0, and the multiplication is done in long double too, plus for conversion to integral type it is truncated to zero rather than rounded. I must say I don't know if it is correct that interpret_float builds constants already in the excess precision (so you end up with 1.034567L), rather than being created in type and then converted to const_type.