diff options
author | Bruno Haible <bruno@clisp.org> | 2009-12-10 20:28:30 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2009-12-10 20:28:30 +0100 |
commit | 441aa3044f43e5572f58c354f01e6bc070acd5c7 (patch) | |
tree | bef236e8058dd3469da28ffcd5a6a287222a4c50 /lib/tanl.c | |
parent | 039ae97b8ae35a2446c5d62d72b21689c97da7e2 (diff) | |
download | gnulib-441aa3044f43e5572f58c354f01e6bc070acd5c7.tar.gz |
Use spaces for indentation, not tabs.
Diffstat (limited to 'lib/tanl.c')
-rw-r--r-- | lib/tanl.c | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/lib/tanl.c b/lib/tanl.c index 60e6637613..51262f0d85 100644 --- a/lib/tanl.c +++ b/lib/tanl.c @@ -23,21 +23,21 @@ * Return tangent function of x. * * kernel function: - * __kernel_tanl ... tangent function on [-pi/4,pi/4] - * __ieee754_rem_pio2l ... argument reduction routine + * __kernel_tanl ... tangent function on [-pi/4,pi/4] + * __ieee754_rem_pio2l ... 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 + * [-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 + * 0 S C T + * 1 C -S -1/T + * 2 -S -C T + * 3 -C S -1/T * ---------------------------------------------------------- * * Special cases: @@ -46,7 +46,7 @@ * trig(NaN) is that NaN; * * Accuracy: - * TRIG(x) returns trig(x) nearly rounded + * TRIG(x) returns trig(x) nearly rounded */ #include "trigl.h" @@ -80,21 +80,21 @@ * -1/tan (if k= -1) is returned. * * Algorithm - * 1. Since tan(-x) = -tan(x), we need only to consider positive x. - * 2. if x < 2^-57, return x with inexact if x!=0. - * 3. tan(x) is approximated by a rational form x + x^3 / 3 + x^5 R(x^2) + * 1. Since tan(-x) = -tan(x), we need only to consider positive x. + * 2. if x < 2^-57, return x with inexact if x!=0. + * 3. tan(x) is approximated by a rational form x + x^3 / 3 + x^5 R(x^2) * on [0,0.67433]. * - * Note: tan(x+y) = tan(x) + tan'(x)*y - * ~ tan(x) + (1+x*x)*y - * Therefore, for better accuracy in computing tan(x+y), let - * r = x^3 * R(x^2) - * then - * tan(x+y) = x + (x^3 / 3 + (x^2 *(r+y)+y)) + * Note: tan(x+y) = tan(x) + tan'(x)*y + * ~ tan(x) + (1+x*x)*y + * Therefore, for better accuracy in computing tan(x+y), let + * r = x^3 * R(x^2) + * then + * tan(x+y) = x + (x^3 / 3 + (x^2 *(r+y)+y)) * * 4. For x in [0.67433,pi/4], let y = pi/4 - x, then - * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) - * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) + * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) + * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) */ @@ -137,12 +137,12 @@ kernel_tanl (long double x, long double y, int iy) if (x < 0.000000000000000006938893903907228377647697925567626953125L) /* x < 2**-57 */ { if ((int) x == 0) - { /* generate inexact */ - if (iy == -1 && x == 0.0) - return 1.0L / fabs (x); - else - return (iy == 1) ? x : -1.0L / x; - } + { /* generate inexact */ + if (iy == -1 && x == 0.0) + return 1.0L / fabs (x); + else + return (iy == 1) ? x : -1.0L / x; + } } if (x >= 0.6743316650390625) /* |x| >= 0.6743316650390625 */ { @@ -167,14 +167,14 @@ kernel_tanl (long double x, long double y, int iy) v = (long double) iy; w = (v - 2.0 * (x - (w * w / (w + v) - r))); if (sign < 0) - w = -w; + w = -w; return w; } if (iy == 1) return w; else - { /* if allow error up to 2 ulp, - simply return -1.0/(x+r) here */ + { /* if allow error up to 2 ulp, + simply return -1.0/(x+r) here */ /* compute -1.0/(x+r) accurately */ u1 = (double) w; v = r - (u1 - x); @@ -202,7 +202,7 @@ tanl (long double x) /* tanl(Inf) is NaN, tanl(0) is 0 */ else if (x + x == x) - return x - x; /* NaN */ + return x - x; /* NaN */ /* argument reduction needed */ else |