https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96600
--- Comment #2 from Matthias Kretz (Vir) <kretz at kde dot org> --- The runtime modf actually returns a large number. This is not about precision but about completely bogus values. You can adjust the testcase to: int e = 69; int main() { long double a = -__builtin_ldexpl( 1.9446689187403240306919491832695730985733566864714824565497322973045558e+00l, e); long double tmp; long double aa = __builtin_modfl(a, &tmp); if (aa >= 1) { __builtin_abort(); } }