/* @(#)s_tan.c 5.1 93/09/24 */
/*
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* Copyright ( C ) 1993 by Sun Microsystems , Inc . All rights reserved .
*
* Developed at SunPro , a Sun Microsystems , Inc . business .
* Permission to use , copy , modify , and distribute this
* software is freely granted , provided that this notice
* is preserved .
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
*/
//#include <sys/cdefs.h>
//__FBSDID("$FreeBSD$");
/* tan(x)
* Return tangent function of x .
*
* kernel function :
* _ _ kernel_tan . . . tangent function on [ - pi / 4 , pi / 4 ]
* _ _ ieee754_rem_pio2 . . . argument reduction routine
*
* Method .
* Let S , C and T denote the sin , cos and tan respectively on
* [ - PI / 4 , + PI / 4 ] . Reduce the argument x to y1 + y2 = x - k * pi / 2
* in [ - pi / 4 , + pi / 4 ] , and let n = k mod 4 .
* We have
*
* n sin ( x ) cos ( x ) tan ( x )
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 0 S C T
* 1 C - S - 1 / T
* 2 - S - C T
* 3 - C S - 1 / T
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*
* Special cases :
* Let trig be any of sin , cos , or tan .
* trig ( + - INF ) is NaN , with signals ;
* trig ( NaN ) is that NaN ;
*
* Accuracy :
* TRIG ( x ) returns trig ( x ) nearly rounded
*/
#include <float .h>
#define INLINE_REM_PIO2
#include "math_private.h"
#include "e_rem_pio2.cpp"
double
tan(double x)
{
double y[2 ],z=0 .0 ;
int32_t n, ix;
/* High word of x. */
GET_HIGH_WORD(ix,x);
/* |x| ~< pi/4 */
ix &= 0 x7fffffff;
if (ix <= 0 x3fe921fb) {
if (ix<0 x3e400000) /* x < 2**-27 */
if ((int )x==0 ) return x; /* generate inexact */
return __kernel_tan(x,z,1 );
}
/* tan(Inf or NaN) is NaN */
else if (ix>=0 x7ff00000) return x-x; /* NaN */
/* argument reduction needed */
else {
n = __ieee754_rem_pio2(x,y);
return __kernel_tan(y[0 ],y[1 ],1 -((n&1 )<<1 )); /* 1 -- n even
-1 -- n odd */
}
}
Messung V0.5 in Prozent C=84 H=100 G=92
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-08-24)
¤
*© Formatika GbR, Deutschland