You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Made possible by EIREXE, xsellier and the SDL team. This commit includes statically linked SDL3 for Windows, Linux and macOS. The vendored copy of SDL3 was setup to only build the required subsystems for gamepad/joystick support, with some patches to be able to make it as minimal as possible and reduce the impact on binary size and code size. Co-authored-by: Álex Román Núñez <eirexe123@gmail.com> Co-authored-by: Xavier Sellier <xsellier@gmail.com> Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
69 lines
1.8 KiB
C
69 lines
1.8 KiB
C
#include "SDL_internal.h"
|
|
/*
|
|
* ====================================================
|
|
* 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.
|
|
* ====================================================
|
|
*/
|
|
|
|
/* 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 "math_libm.h"
|
|
#include "math_private.h"
|
|
|
|
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 &= 0x7fffffff;
|
|
if(ix <= 0x3fe921fb) return __kernel_tan(x,z,1);
|
|
|
|
/* tan(Inf or NaN) is NaN */
|
|
else if (ix>=0x7ff00000) 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 */
|
|
}
|
|
}
|
|
libm_hidden_def(tan)
|