/* origin: FreeBSD /usr/src/lib/msun/src/s_cos.c *//** ====================================================* 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.* ====================================================*//* cos(x)* Return cosine function of x.** kernel function:* __sin ... sine function on [-pi/4,pi/4]* __cos ... cosine function on [-pi/4,pi/4]* __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 "libm.h"double cos(double x){double y[2];uint32_t ix;unsigned n;GET_HIGH_WORD(ix, x);ix &= 0x7fffffff;/* |x| ~< pi/4 */if (ix <= 0x3fe921fb) {if (ix < 0x3e46a09e) { /* |x| < 2**-27 * sqrt(2) *//* raise inexact if x!=0 */FORCE_EVAL(x + 0x1p120f);return 1.0;}return __cos(x, 0);}/* cos(Inf or NaN) is NaN */if (ix >= 0x7ff00000)return x-x;/* argument reduction */n = __rem_pio2(x, y);switch (n&3) {case 0: return __cos(y[0], y[1]);case 1: return -__sin(y[0], y[1], 1);case 2: return -__cos(y[0], y[1]);default:return __sin(y[0], y[1], 1);}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。