src/libm/s_tan.c
author Sam Lantinga <slouken@libsdl.org>
Mon, 22 Jun 2015 23:36:06 -0700
changeset 9776 952ff8a5076f
parent 8842 f587255157cf
permissions -rw-r--r--
Fixed bug 3030 - SDL_RecreateWindow fails to restore title, icon, etc.

Adam M.

It loses the title and icon when window recreation fails. For instance, this may happen when trying to create an OpenGL ES window on a system that doesn't support it. But at that point, the title and icon have already been lost.
     1 /*
     2  * ====================================================
     3  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
     4  *
     5  * Developed at SunPro, a Sun Microsystems, Inc. business.
     6  * Permission to use, copy, modify, and distribute this
     7  * software is freely granted, provided that this notice
     8  * is preserved.
     9  * ====================================================
    10  */
    11 
    12 /* tan(x)
    13  * Return tangent function of x.
    14  *
    15  * kernel function:
    16  *	__kernel_tan		... tangent function on [-pi/4,pi/4]
    17  *	__ieee754_rem_pio2	... argument reduction routine
    18  *
    19  * Method.
    20  *      Let S,C and T denote the sin, cos and tan respectively on
    21  *	[-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2
    22  *	in [-pi/4 , +pi/4], and let n = k mod 4.
    23  *	We have
    24  *
    25  *          n        sin(x)      cos(x)        tan(x)
    26  *     ----------------------------------------------------------
    27  *	    0	       S	   C		 T
    28  *	    1	       C	  -S		-1/T
    29  *	    2	      -S	  -C		 T
    30  *	    3	      -C	   S		-1/T
    31  *     ----------------------------------------------------------
    32  *
    33  * Special cases:
    34  *      Let trig be any of sin, cos, or tan.
    35  *      trig(+-INF)  is NaN, with signals;
    36  *      trig(NaN)    is that NaN;
    37  *
    38  * Accuracy:
    39  *	TRIG(x) returns trig(x) nearly rounded
    40  */
    41 
    42 #include "math_libm.h"
    43 #include "math_private.h"
    44 
    45 double tan(double x)
    46 {
    47 	double y[2],z=0.0;
    48 	int32_t n, ix;
    49 
    50     /* High word of x. */
    51 	GET_HIGH_WORD(ix,x);
    52 
    53     /* |x| ~< pi/4 */
    54 	ix &= 0x7fffffff;
    55 	if(ix <= 0x3fe921fb) return __kernel_tan(x,z,1);
    56 
    57     /* tan(Inf or NaN) is NaN */
    58 	else if (ix>=0x7ff00000) return x-x;		/* NaN */
    59 
    60     /* argument reduction needed */
    61 	else {
    62 	    n = __ieee754_rem_pio2(x,y);
    63 	    return __kernel_tan(y[0],y[1],1-((n&1)<<1)); /*   1 -- n even
    64 							-1 -- n odd */
    65 	}
    66 }
    67 libm_hidden_def(tan)