summaryrefslogtreecommitdiff
path: root/libm/ldouble/asinl.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-11-22 14:04:29 +0000
committerEric Andersen <andersen@codepoet.org>2001-11-22 14:04:29 +0000
commit7ce331c01ce6eb7b3f5c715a38a24359da9c6ee2 (patch)
tree3a7e8476e868ae15f4da1b7ce26b2db6f434468c /libm/ldouble/asinl.c
parentc117dd5fb183afb1a4790a6f6110d88704be6bf8 (diff)
Totally rework the math library, this time based on the MacOs X
math library (which is itself based on the math lib from FreeBSD). -Erik
Diffstat (limited to 'libm/ldouble/asinl.c')
-rw-r--r--libm/ldouble/asinl.c249
1 files changed, 0 insertions, 249 deletions
diff --git a/libm/ldouble/asinl.c b/libm/ldouble/asinl.c
deleted file mode 100644
index 163f01055..000000000
--- a/libm/ldouble/asinl.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* asinl.c
- *
- * Inverse circular sine, long double precision
- *
- *
- *
- * SYNOPSIS:
- *
- * double x, y, asinl();
- *
- * y = asinl( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns radian angle between -pi/2 and +pi/2 whose sine is x.
- *
- * A rational function of the form x + x**3 P(x**2)/Q(x**2)
- * is used for |x| in the interval [0, 0.5]. If |x| > 0.5 it is
- * transformed by the identity
- *
- * asin(x) = pi/2 - 2 asin( sqrt( (1-x)/2 ) ).
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE -1, 1 30000 2.7e-19 4.8e-20
- *
- *
- * ERROR MESSAGES:
- *
- * message condition value returned
- * asinl domain |x| > 1 NANL
- *
- */
- /* acosl()
- *
- * Inverse circular cosine, long double precision
- *
- *
- *
- * SYNOPSIS:
- *
- * double x, y, acosl();
- *
- * y = acosl( x );
- *
- *
- *
- * DESCRIPTION:
- *
- * Returns radian angle between -pi/2 and +pi/2 whose cosine
- * is x.
- *
- * Analytically, acos(x) = pi/2 - asin(x). However if |x| is
- * near 1, there is cancellation error in subtracting asin(x)
- * from pi/2. Hence if x < -0.5,
- *
- * acos(x) = pi - 2.0 * asin( sqrt((1+x)/2) );
- *
- * or if x > +0.5,
- *
- * acos(x) = 2.0 * asin( sqrt((1-x)/2) ).
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE -1, 1 30000 1.4e-19 3.5e-20
- *
- *
- * ERROR MESSAGES:
- *
- * message condition value returned
- * acosl domain |x| > 1 NANL
- */
-
-/* asin.c */
-
-/*
-Cephes Math Library Release 2.7: May, 1998
-Copyright 1984, 1990, 1998 by Stephen L. Moshier
-*/
-
-#include <math.h>
-
-#ifdef UNK
-static long double P[] = {
- 3.7769340062433674871612E-3L,
--6.1212919176969202969441E-1L,
- 5.9303993515791417710775E0L,
--1.8631697621590161441592E1L,
- 2.3314603132141795720634E1L,
--1.0087146579384916260197E1L,
-};
-static long double Q[] = {
-/* 1.0000000000000000000000E0L,*/
--1.5684335624873146511217E1L,
- 7.8702951549021104258866E1L,
--1.7078401170625864261444E2L,
- 1.6712291455718995937376E2L,
--6.0522879476309497128868E1L,
-};
-#endif
-
-#ifdef IBMPC
-static short P[] = {
-0x59d1,0x3509,0x7009,0xf786,0x3ff6, XPD
-0xbe97,0x93e6,0x7fab,0x9cb4,0xbffe, XPD
-0x8bf5,0x6810,0xd4dc,0xbdc5,0x4001, XPD
-0x9bd4,0x8d86,0xb77b,0x950d,0xc003, XPD
-0x3b0f,0x9e25,0x4ea5,0xba84,0x4003, XPD
-0xea38,0xc6a9,0xf3cf,0xa164,0xc002, XPD
-};
-static short Q[] = {
-/*0x0000,0x0000,0x0000,0x8000,0x3fff,*/
-0x1229,0x8516,0x09e9,0xfaf3,0xc002, XPD
-0xb5c3,0xf36f,0xe943,0x9d67,0x4005, XPD
-0xe11a,0xbe0f,0xb4fd,0xaac8,0xc006, XPD
-0x4c69,0x1355,0x7754,0xa71f,0x4006, XPD
-0xded7,0xa9fe,0x6db7,0xf217,0xc004, XPD
-};
-#endif
-
-#ifdef MIEEE
-static long P[] = {
-0x3ff60000,0xf7867009,0x350959d1,
-0xbffe0000,0x9cb47fab,0x93e6be97,
-0x40010000,0xbdc5d4dc,0x68108bf5,
-0xc0030000,0x950db77b,0x8d869bd4,
-0x40030000,0xba844ea5,0x9e253b0f,
-0xc0020000,0xa164f3cf,0xc6a9ea38,
-};
-static long Q[] = {
-/*0x3fff0000,0x80000000,0x00000000,*/
-0xc0020000,0xfaf309e9,0x85161229,
-0x40050000,0x9d67e943,0xf36fb5c3,
-0xc0060000,0xaac8b4fd,0xbe0fe11a,
-0x40060000,0xa71f7754,0x13554c69,
-0xc0040000,0xf2176db7,0xa9feded7,
-};
-#endif
-#ifdef NANS
-extern long double NANL;
-#endif
-#ifdef ANSIPROT
-extern long double ldexpl ( long double, int );
-extern long double sqrtl ( long double );
-extern long double polevll ( long double, void *, int );
-extern long double p1evll ( long double, void *, int );
-long double asinl ( long double );
-#else
-long double ldexpl(), sqrtl(), polevll(), p1evll();
-long double asinl();
-#endif
-
-long double asinl(x)
-long double x;
-{
-long double a, p, z, zz;
-short sign, flag;
-extern long double PIO2L;
-
-if( x > 0 )
- {
- sign = 1;
- a = x;
- }
-else
- {
- sign = -1;
- a = -x;
- }
-
-if( a > 1.0L )
- {
- mtherr( "asinl", DOMAIN );
-#ifdef NANS
- return( NANL );
-#else
- return( 0.0L );
-#endif
- }
-
-if( a < 1.0e-8L )
- {
- z = a;
- goto done;
- }
-
-if( a > 0.5L )
- {
- zz = 0.5L -a;
- zz = ldexpl( zz + 0.5L, -1 );
- z = sqrtl( zz );
- flag = 1;
- }
-else
- {
- z = a;
- zz = z * z;
- flag = 0;
- }
-
-p = zz * polevll( zz, P, 5)/p1evll( zz, Q, 5);
-z = z * p + z;
-if( flag != 0 )
- {
- z = z + z;
- z = PIO2L - z;
- }
-done:
-if( sign < 0 )
- z = -z;
-return(z);
-}
-
-
-extern long double PIO2L, PIL;
-
-long double acosl(x)
-long double x;
-{
-
-if( x < -1.0L )
- goto domerr;
-
-if( x < -0.5L)
- return( PIL - 2.0L * asinl( sqrtl(0.5L*(1.0L+x)) ) );
-
-if( x > 1.0L )
- {
-domerr: mtherr( "acosl", DOMAIN );
-#ifdef NANS
- return( NANL );
-#else
- return( 0.0L );
-#endif
- }
-
-if( x > 0.5L )
- return( 2.0L * asinl( sqrtl(0.5L*(1.0L-x) ) ) );
-
-return( PIO2L - asinl(x) );
-}