/* tandg.c
*
* Circular tangent of argument in degrees
*
*
*
* SYNOPSIS :
*
* double x , y , tandg ( ) ;
*
* y = tandg ( x ) ;
*
*
*
* DESCRIPTION :
*
* Returns the circular tangent of the argument x in degrees .
*
* Range reduction is modulo pi / 4 . A rational function
* x + x * * 3 P ( x * * 2 ) / Q ( x * * 2 )
* is employed in the basic interval [ 0 , pi / 4 ] .
*
*
*
* ACCURACY :
*
* Relative error :
* arithmetic domain # trials peak rms
* DEC 0 , 10 8000 3 . 4 e - 17 1 . 2 e - 17
* IEEE 0 , 10 30000 3 . 2 e - 16 8 . 4 e - 17
*
* ERROR MESSAGES :
*
* message condition value returned
* tandg total loss x > 8 . 0 e14 ( DEC ) 0 . 0
* x > 1 . 0 e14 ( IEEE )
* tandg singularity x = 180 k + 90 MAXNUM
*/
/* cotdg.c
*
* Circular cotangent of argument in degrees
*
*
*
* SYNOPSIS :
*
* double x , y , cotdg ( ) ;
*
* y = cotdg ( x ) ;
*
*
*
* DESCRIPTION :
*
* Returns the circular cotangent of the argument x in degrees .
*
* Range reduction is modulo pi / 4 . A rational function
* x + x * * 3 P ( x * * 2 ) / Q ( x * * 2 )
* is employed in the basic interval [ 0 , pi / 4 ] .
*
*
* ERROR MESSAGES :
*
* message condition value returned
* cotdg total loss x > 8 . 0 e14 ( DEC ) 0 . 0
* x > 1 . 0 e14 ( IEEE )
* cotdg singularity x = 180 k MAXNUM
*/
/*
Cephes Math Library Release 2 . 8 : June , 2000
Copyright 1984 , 1987 , 2000 by Stephen L . Moshier
*/
#include "mconf.h"
#ifdef UNK
static double P[] = {
-1 .30936939181383777646 E4,
1 .15351664838587416140 E6,
-1 .79565251976484877988 E7
};
static double Q[] = {
/* 1.00000000000000000000E0,*/
1 .36812963470692954678 E4,
-1 .32089234440210967447 E6,
2 .50083801823357915839 E7,
-5 .38695755929454629881 E7
};
static double PI180 = 1 .74532925199432957692 E-2 ;
static double lossth = 1 .0 e14;
#endif
#ifdef DEC
static unsigned short P[] = {
0143514 ,0113306 ,0111171 ,0174674 ,
0045214 ,0147545 ,0027744 ,0167346 ,
0146210 ,0177526 ,0114514 ,0105660
};
static unsigned short Q[] = {
/*0040200,0000000,0000000,0000000,*/
0043525 ,0142457 ,0072633 ,0025617 ,
0145241 ,0036742 ,0140525 ,0162256 ,
0046276 ,0146176 ,0013526 ,0143573 ,
0146515 ,0077401 ,0162762 ,0150607
};
static unsigned short P1[] = {0036616 ,0175065 ,0011224 ,0164711 };
#define PI180 *(double *)P1
static double lossth = 8 .0 e14;
#endif
#ifdef IBMPC
static unsigned short P[] = {
0 x3f38,0 xd24f,0 x92d8,0 xc0c9,
0 x9ddd,0 xa5fc,0 x99ec,0 x4131,
0 x9176,0 xd329,0 x1fea,0 xc171
};
static unsigned short Q[] = {
/*0x0000,0x0000,0x0000,0x3ff0,*/
0 x6572,0 xeeb3,0 xb8a5,0 x40ca,
0 xbc96,0 x582a,0 x27bc,0 xc134,
0 xd8ef,0 xc2ea,0 xd98f,0 x4177,
0 x5a31,0 x3cbe,0 xafe0,0 xc189
};
static unsigned short P1[] = {0 x9d39,0 xa252,0 xdf46,0 x3f91};
#define PI180 *(double *)P1
static double lossth = 1 .0 e14;
#endif
#ifdef MIEEE
static unsigned short P[] = {
0 xc0c9,0 x92d8,0 xd24f,0 x3f38,
0 x4131,0 x99ec,0 xa5fc,0 x9ddd,
0 xc171,0 x1fea,0 xd329,0 x9176
};
static unsigned short Q[] = {
0 x40ca,0 xb8a5,0 xeeb3,0 x6572,
0 xc134,0 x27bc,0 x582a,0 xbc96,
0 x4177,0 xd98f,0 xc2ea,0 xd8ef,
0 xc189,0 xafe0,0 x3cbe,0 x5a31
};
static unsigned short P1[] = {
0 x3f91,0 xdf46,0 xa252,0 x9d39
};
#define PI180 *(double *)P1
static double lossth = 1 .0 e14;
#endif
#ifdef ANSIPROT
extern double polevl ( double , void *, int );
extern double p1evl ( double , void *, int );
extern double floor ( double );
extern double ldexp ( double , int );
static double tancot( double , int );
#else
double polevl(), p1evl(), floor(), ldexp();
static double tancot();
#endif
extern double MAXNUM;
extern double PIO4;
double tandg(x)
double x;
{
return ( tancot(x,0 ) );
}
double cotdg(x)
double x;
{
return ( tancot(x,1 ) );
}
static double tancot( xx, cotflg )
double xx;
int cotflg;
{
double x, y, z, zz;
int j, sign;
/* make argument positive but save the sign */
if ( xx < 0 )
{
x = -xx;
sign = -1 ;
}
else
{
x = xx;
sign = 1 ;
}
if ( x > lossth )
{
mtherr( "tandg" , TLOSS );
return (0 .0 );
}
/* compute x mod PIO4 */
y = floor( x/45 .0 );
/* strip high bits of integer part */
z = ldexp( y, -3 );
z = floor(z); /* integer part of y/8 */
z = y - ldexp( z, 3 ); /* y - 16 * (y/16) */
/* integer and fractional part modulo one octant */
j = z;
/* map zeros and singularities to origin */
if ( j & 1 )
{
j += 1 ;
y += 1 .0 ;
}
z = x - y * 45 .0 ;
z *= PI180;
zz = z * z;
if ( zz > 1 .0 e-14 )
y = z + z * (zz * polevl( zz, P, 2 )/p1evl(zz, Q, 4 ));
else
y = z;
if ( j & 2 )
{
if ( cotflg )
y = -y;
else
{
if ( y != 0 .0 )
{
y = -1 .0 /y;
}
else
{
mtherr( "tandg" , SING );
y = MAXNUM;
}
}
}
else
{
if ( cotflg )
{
if ( y != 0 .0 )
y = 1 .0 /y;
else
{
mtherr( "cotdg" , SING );
y = MAXNUM;
}
}
}
if ( sign < 0 )
y = -y;
return ( y );
}
Messung V0.5 in Prozent C=96 H=100 G=97
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-17)
¤
*© Formatika GbR, Deutschland