示例#1
0
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;
}
示例#2
0
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 );
}
示例#3
0
MINU comp_med_coeli( TIM *tp )
{
 DEGR degs, m;
 MINU mins, mc, secs;
 double x;

 sidereal_2_angular( tp, &degs, &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 );
}
示例#4
0
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 ) );
}
示例#5
0
double tan(double angle)
{
  return _tan(angle);
}