char float_tan( floatnum x, int digits) { if (!chckmathparam(x, digits)) return 0; return float_getexponent(x) >= DECPRECISION - 1 || !_trigreduce(x, digits) || !_tan(x, digits)? _seterror(x, EvalUnstable) : 1; }
void setup_obliquity( JULIAN *ptr ) { double temp, eps; temp = ( -1.81e-3 * ptr->jd_cent ) + 5.9e-3; temp *= ptr->jd_cent; temp += 4.6845e1; temp *= ptr->jd_cent; eps = 2.345229444e1 - ( temp / 3600.0 ); obliquity = eps; eps = d2r( eps ); sin_obliquity = _sin( eps ); cos_obliquity = _cos( eps ); tan_obliquity = _tan( eps ); }
MINU comp_med_coeli( TIM *tp ) { DEGR degs, m; MINU mins, mc, secs; double x; sidereal_2_angular( tp, °s, &mins, &secs ); /* convert sidereal time to angular */ right_asc_mh = degrees_2_rads( degs, mins ); /* change to radians */ x = (((double) secs)/60.0)/60; x *= ( PI / 180.0 ); right_asc_mh += x; if ( right_asc_mh > ( PI + PI ) ) right_asc_mh -= ( PI + PI ); mc = div_2_minutes( _tan( right_asc_mh ), cos_obliquity ); med_coeli = div_2_rads( _tan( right_asc_mh ), cos_obliquity ); m = abs( (mc / 60) - degs ); if ( m > 150 && m < 210 ) { mc += d2m(180); med_coeli += PI; } mc %= d2m(360); med_coeli = fmodulus(med_coeli,TWO_PI); return( mc ); }
MINU calc_ascendant( DEG_MIN *lat ) { double temp, temp2, temp3; latitude = degrees_2_rads( lat->degrees, lat->minutes ); tan_latitude = _tan(latitude); temp = _cos( right_asc_mh ); temp2 = ( sin_obliquity * tan_latitude ); temp3 = ( cos_obliquity * _sin( right_asc_mh ) ); temp2 += temp3; if ( temp2 == 0.0 && temp3 == 0.0 ) asc_rads = PI/2.0; else asc_rads= div_2_rads( temp, -temp2 ); if ( temp2 == 0.0 && temp3 == 0.0 ) return( d2m(90) ); else return( div_2_minutes( temp, -temp2 ) ); }
double tan(double angle) { return _tan(angle); }