#include "libm.h"#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024longdoubleceill(longdoublex){returnceil(x);}#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384staticconstlongdoubletoint=1/LDBL_EPSILON;longdoubleceill(longdoublex){unionldshapeu={x};inte=u.i.se&0x7fff;longdoubley;if(e>=0x3fff+LDBL_MANT_DIG-1||x==0)returnx;/* y = int(x) - x, where int(x) is an integer neighbor of x */if(u.i.se>>15)y=x-toint+toint-x;elsey=x+toint-toint-x;/* special case because of non-nearest rounding modes */if(e<=0x3fff-1){FORCE_EVAL(y);returnu.i.se>>15?-0.0:1;}if(y<0)returnx+y+1;returnx+y;}#endif