https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97653
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- int printf(const char*, ...); const unsigned long k = 256; int main() { long double r[] = { 0.1L, 0.2L, 0.5L, 0.9L }; for (int i = 0; i < 4; ++i) { unsigned long j = k * r[i]; printf("%lu * %Lf = %lu\n", k, r[i], j); } } $ ~/gcc/ieee128/bin/gcc k.c -mno-gnu-attribute -mabi=ibmlongdouble -Wall && ./a.out 256 * 0.100000 = 256 256 * 0.200000 = 256 256 * 0.500000 = 256 256 * 0.900000 = 256