https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96600
--- Comment #3 from Matthias Kretz (Vir) <kretz at kde dot org> --- I should be more precise. Take this test case: int e = 69; int main() { __ibm128 a = -__builtin_ldexpl( 1.9446689187403240306919491832695730985733566864714824565497322973045558e+00l, e); __ibm128 tmp; __ibm128 aa = __builtin_modfl(a, &tmp); if (aa >= 1) { __builtin_printf("modfl: %Lf\n", aa); __builtin_printf("copysign(x-trunc(x), x): %Lf\n", __builtin_copysignl(a - __builtin_truncl(a), a)); return 1; } return 0; } it prints: modfl: 43227.412695 copysign(x-trunc(x), x): -0.587305