BIAS
e0 = ex - BIAS - 23; /* e0 = ilogb(|x|)-23; */
if (ex < BIAS + 45 || ex == BIAS + 45 &&
#define ASIN_LINEAR (BIAS - 56) /* 2**-56 */
#define ACOS_CONST (BIAS - 113) /* 2**-113 */
#define ATAN_CONST (BIAS + 113) /* 2**113 */
#define ATAN_LINEAR (BIAS - 56) /* 2**-56 */
SET_LDBL_EXPSIGN(twopkm2, BIAS + k - 2);
SET_LDBL_EXPSIGN(scale1, BIAS + half_expt);
SET_LDBL_EXPSIGN(scale2, BIAS + expt - half_expt);
if (ix >= BIAS + 14) { /* |x| >= 16384 */
if (ix == BIAS + LDBL_MAX_EXP) {
} else if (ix <= BIAS - 115) { /* |x| < 0x1p-115 */
#define EXPMASK (BIAS + LDBL_MAX_EXP)
SET_LDBL_EXPSIGN(twopk, BIAS + k + 10000);
if (ix >= BIAS + 7) { /* |x| >= 128 or x is NaN */
if (ix == BIAS + LDBL_MAX_EXP) {
if (ix < BIAS - 113) { /* |x| < 0x1p-113 */
if (ix >= BIAS - 7)
v.xbits.expsign = BIAS + k;
v.xbits.expsign = BIAS - k;
if (ix >= BIAS + 13) { /* |x| >= 8192 or x is NaN */
if (ix == BIAS + LDBL_MAX_EXP) {
} else if (ix < BIAS - 114) { /* |x| < 0x1p-114 */
SET_LDBL_EXPSIGN(twopk, BIAS + k);
e0 = ex - BIAS - 23; /* e0 = ilogb(|x|)-23; */
if (ex < BIAS + 25 || (ex == BIAS + 25 && u.bits.manh < 0xc90fdaa2)) {
#define ASIN_LINEAR (BIAS - 32) /* 2**-32 */
#define ACOS_CONST (BIAS - 65) /* 2**-65 */
#define ATAN_CONST (BIAS + 65) /* 2**65 */
#define ATAN_LINEAR (BIAS - 32) /* 2**-32 */
SET_LDBL_EXPSIGN(twopkm2, BIAS + k - 2);
SET_LDBL_EXPSIGN(scale1, BIAS + half_expt);
SET_LDBL_EXPSIGN(scale2, BIAS + expt - half_expt);
if (ix >= BIAS + 14) { /* |x| >= 16384 or x is NaN */
if (ix == BIAS + LDBL_MAX_EXP) {
} else if (ix <= BIAS - 66) { /* |x| < 0x1p-65 (includes pseudos) */
v.xbits.expsign = BIAS + k;
v.xbits.expsign = BIAS + k + 10000;
SET_LDBL_EXPSIGN(twopk, BIAS + k);
SET_LDBL_EXPSIGN(twopk, BIAS + k + 10000);
if (ix >= BIAS + 6) { /* |x| >= 64 or x is NaN */
if (ix == BIAS + LDBL_MAX_EXP) {
if (ix < BIAS - 74) { /* |x| < 0x1p-74 (includes pseudos) */
if (ix >= BIAS - 7)
v.xbits.expsign = BIAS + k;
v.xbits.expsign = BIAS - k;
if (ix >= BIAS + 13) { /* |x| >= 8192 or x is NaN */
if (ix == BIAS + LDBL_MAX_EXP) {
} else if (ix < BIAS - 75) { /* |x| < 0x1p-75 (includes pseudos) */
if (ix <= (BIAS + DBL_MAX_EXP / 2 - CUTOFF) << 20)
if (ix <= (BIAS + FLT_MAX_EXP / 2 - CUTOFF) << 23)
if (ix <= BIAS + LDBL_MAX_EXP / 2 - CUTOFF)
} else if (hx >= BIAS + EXP_LARGE) { /* x >= LARGE */
if(expt >= BIAS) { /* |x| >= 1 */
if(expt==BIAS && ((u.bits.manh&~LDBL_NBIT)|u.bits.manl)==0) {
if(expt<BIAS-1) { /* |x| < 0.5 */
if(expt >= BIAS) { /* |x|>= 1 */
if(expt==BIAS && ((u.bits.manh&~LDBL_NBIT)|u.bits.manl)==0)
} else if (expt<BIAS-1) { /* |x|<0.5 */
if ((exptx==BIAS+LDBL_MAX_EXP &&
(expty==BIAS+LDBL_MAX_EXP &&
if (expsignx==BIAS && ((ux.bits.manh&~LDBL_NBIT)|ux.bits.manl)==0)
if(exptx==BIAS+LDBL_MAX_EXP) {
if(expty==BIAS+LDBL_MAX_EXP) {
if(expty==BIAS+LDBL_MAX_EXP)
if (ix < BIAS + EXP_TINY && (huge + x) > zero)
if (ix<BIAS-(LDBL_MANT_DIG+1)/2) /* |x| < TINY */
iy = uy.bits.exp - (BIAS + 512);
iy = uy.bits.exp - BIAS;
ux.bits.exp = iy + (BIAS + 512);
ux.bits.exp = iy + BIAS;
(ux.bits.exp == BIAS + LDBL_MAX_EXP) || /* or x not finite */
(uy.bits.exp == BIAS + LDBL_MAX_EXP &&
ix = ux.bits.exp - (BIAS + 512);
ix = ux.bits.exp - BIAS;
if (ix<BIAS-(LDBL_MANT_DIG+1)/2) /* |x|<TINY */
if (ix < BIAS + EXP_TINY) { /* |x| < TINY, or misnormal */
if (ix >= BIAS + EXP_LARGE) { /* |x| >= LARGE, or misnormal */
if(expt == BIAS + LDBL_MAX_EXP &&
if (expman < ((BIAS - 2) << 8) + 0xc0) { /* |x| < 0.4375 */
if (expman < (BIAS << 8) + 0x30) { /* |x| < 1.1875 */
if (expman < ((BIAS - 1) << 8) + 0x60) { /* 7/16 <=|x|<11/16 */
if (expman < ((BIAS + 1) << 8) + 0x38) { /* |x| < 2.4375 */
if (k == BIAS + LDBL_MAX_EXP)
k -= BIAS + 514;
k -= BIAS;
u.xbits.expsign = BIAS;
v.xbits.expsign = (expsign & 0x8000) | (BIAS + k / 3);
ix = ux.bits.exp - (BIAS + 512);
ix = ux.bits.exp - BIAS;
iy = uy.bits.exp - (BIAS + 512);
iy = uy.bits.exp - BIAS;
ux.bits.exp = iy + (BIAS + 512);
ux.bits.exp = iy + BIAS;
(ux.bits.exp == BIAS + LDBL_MAX_EXP) || /* or x not finite */
(uy.bits.exp == BIAS + LDBL_MAX_EXP &&
if (ex >= BIAS + LDBL_MANT_DIG - 1) {
if (ex == BIAS + LDBL_MAX_EXP)
if (ex < BIAS && x == 0.0L)
if (__predict_false(ix<BIAS-(LDBL_MANT_DIG+1)/2)) { /* |x|<TINY */