src/libm/s_tan.c
 author Ryan C. Gordon Thu, 21 Apr 2016 03:16:44 -0400 changeset 11729 d1ce8396c356 parent 8842 f587255157cf permissions -rw-r--r--
Initial shot at a renderer target for Apple's Metal API.

This isn't complete, but is enough to run testsprite2. It's currently
Mac-only; with a little work to figure out how to properly glue in a Metal
layer to a UIView, this will likely work on iOS, too.

This is only wired up to the configure script right now, and disabled by
default. CMake and Xcode still need their bits filled in as appropriate.
```     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,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,y,1-((n&1)<<1)); /*   1 -- n even
```
```    64 							-1 -- n odd */
```
```    65 	}
```
```    66 }
```
```    67 libm_hidden_def(tan)
```
{"ft_lang_label":"__label__en","ft_lang_prob":0.6671654,"math_prob":0.89925563,"size":1705,"snap":"2019-51-2020-05","text_gpt3_token_len":458,"char_repetition_ratio":0.18283363,"word_repetition_ratio":0.0,"special_character_ratio":0.45102638,"punctuation_ratio":0.16257669,"nsfw_num_words":0,"has_unicode_error":false,"math_prob_llama3":0.97527826,"pos_list":[0],"im_url_duplicate_count":[null],"WARC_HEADER":"{\"WARC-Type\":\"response\",\"WARC-Date\":\"2020-01-24T04:29:24Z\",\"WARC-Record-ID\":\"<urn:uuid:47ee2167-020a-4bfc-9c35-70da55f661d6>\",\"Content-Length\":\"13628\",\"Content-Type\":\"application/http; msgtype=response\",\"WARC-Warcinfo-ID\":\"<urn:uuid:46a3f986-a1e2-4c5b-98e2-6b65d85e61b7>\",\"WARC-Concurrent-To\":\"<urn:uuid:3eabf78c-6951-4e08-86bb-224d3d80dc17>\",\"WARC-IP-Address\":\"192.241.223.99\",\"WARC-Target-URI\":\"https://hg.libsdl.org/SDL/file/d1ce8396c356/src/libm/s_tan.c\",\"WARC-Payload-Digest\":\"sha1:GK3VLKEBSHPA3VW7TPQOVVJ47ZCRKZIY\",\"WARC-Block-Digest\":\"sha1:DOB7YVUWG42AO3JHU27U6ENUTQLKBY55\",\"WARC-Identified-Payload-Type\":\"application/xhtml+xml\",\"warc_filename\":\"/cc_download/warc_2020/CC-MAIN-2020-05/CC-MAIN-2020-05_segments_1579250615407.46_warc_CC-MAIN-20200124040939-20200124065939-00362.warc.gz\"}"}