/* * __q_cot - real(kind=16) - pass by address * 128-bit float cotangent */ _f_real16 __q_cot(_f_real16 *arg) { return (1.L / __qtan(*arg) ); }
long double __q_tand(long double *x) { ldquad u; int n; double dn; long double result; u.ld = *x; if ( u.q.hi != u.q.hi ) { /* x is a NaN; return a quiet NaN */ #ifdef _IP_NAN_SETS_ERRNO *__errnoaddr = EDOM; #endif return ( __libm_qnan_ld ); } if ( __qabs(*x) == __libm_inf_ld ) { /* x is +/-Inf; return a quiet NaN */ *__errnoaddr = EDOM; return ( __libm_qnan_ld ); } if ( *x == 0.0L ) return ( 0.0L ); /* reduce arg to +/- 180 degrees */ u.ld = __qmod(u.ld, 180.0L); /* next, reduce to +/-45.0 */ if ( __qabs(u.ld) <= 45.0L ) { n = 0; } else { dn = u.q.hi*rninety.d; n = ROUND(dn); dn = n; u.ld = u.ld - dn*90.0; } /* convert x to radians */ u.ld = u.ld*radspdeg.ld; if ( (n&1) == 0 ) { result = __qtan(u.ld); } else { if ( u.ld == 0.0L ) { *__errnoaddr = EDOM; return ( __libm_qnan_ld ); } result = -1.0L/__qtan(u.ld); } return ( result ); }