In the following two files: gcc/libquadmath/math/expq.c glibc/blob/master/sysdeps/ieee754/ldbl-128/e_expl.c
-------------------------------------------------------------------- static const __float128 C[] = { /* Smallest integer x for which e^x overflows. */ #define himark C[0] 11356.523406294143949491931077970765Q, /* Largest integer x for which e^x underflows. */ #define lomark C[1] -11433.4627433362978788372438434526231Q, /* 3x2^96 */ #define THREEp96 C[2] 237684487542793012780631851008.0Q, /* 3x2^103 */ #define THREEp103 C[3] 30423614405477505635920876929024.0Q, /* 3x2^111 */ #define THREEp111 C[4] 7788445287802241442795744493830144.0Q, -------------------------------------------------------------------- Why is 3x2^96 defined as 59421121885698253195157962752 instead of 237684487542793012780631851008? 3x2^94=59421121885698253195157962752, 3x2^96=237684487542793012780631851008, 3x2^103=30423614405477505635920876929024, 3x2^111=7788445287802241442795744493830144.