/* 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=94 H=87 G=90
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland