/* @(#)s_sin.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$");
/* sin(x)
* Return sine function of x .
*
* kernel function :
* _ _ kernel_sin . . . sine function on [ - pi / 4 , pi / 4 ]
* _ _ kernel_cos . . . cose 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
sin(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 x3e500000) /* |x| < 2**-26 */
{if ((int )x==0 ) return x;} /* generate inexact */
return __kernel_sin(x,z,0 );
}
/* sin(Inf or NaN) is NaN */
else if (ix>=0 x7ff00000) return x-x;
/* argument reduction needed */
else {
n = __ieee754_rem_pio2(x,y);
switch (n&3 ) {
case 0 : return __kernel_sin(y[0 ],y[1 ],1 );
case 1 : return __kernel_cos(y[0 ],y[1 ]);
case 2 : return -__kernel_sin(y[0 ],y[1 ],1 );
default :
return -__kernel_cos(y[0 ],y[1 ]);
}
}
}
Messung V0.5 in Prozent C=88 H=100 G=94
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-08-24)
¤
*© Formatika GbR, Deutschland