/*
* Copyright ( c ) 1998 , 2001 , Oracle and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation . Oracle designates this
* particular file as subject to the " Classpath " exception as provided
* by Oracle in the LICENSE file that accompanied this code .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*/
/* 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 "fdlibm.h"
#ifdef __STDC__
double sin(double x)
#else
double sin(x)
double x;
#endif
{
double y[2 ],z=0 .0 ;
int n, ix;
/* High word of x. */
ix = __HI(x);
/* |x| ~< pi/4 */
ix &= 0 x7fffffff;
if (ix <= 0 x3fe921fb) 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=94 H=100 G=96
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-10-04)
¤
*© Formatika GbR, Deutschland