[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commits] r18293 - in /fsf/trunk/libc: ./ localedata/ localedata/locales/ math/ sysdeps/i386/fpu/ sysdeps/x86_64/fpu/
- To: commits@xxxxxxxxxx
- Subject: [Commits] r18293 - in /fsf/trunk/libc: ./ localedata/ localedata/locales/ math/ sysdeps/i386/fpu/ sysdeps/x86_64/fpu/
- From: eglibc@xxxxxxxxxx
- Date: Tue, 01 May 2012 00:01:34 -0000
Author: eglibc
Date: Tue May 1 00:01:33 2012
New Revision: 18293
Log:
Import glibc-mainline for 2012-05-01
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/NEWS
fsf/trunk/libc/localedata/ChangeLog
fsf/trunk/libc/localedata/locales/de_AT
fsf/trunk/libc/math/e_exp10.c
fsf/trunk/libc/math/e_exp10f.c
fsf/trunk/libc/math/e_exp10l.c
fsf/trunk/libc/math/libm-test.inc
fsf/trunk/libc/sysdeps/i386/fpu/e_acos.S
fsf/trunk/libc/sysdeps/i386/fpu/e_acosf.S
fsf/trunk/libc/sysdeps/i386/fpu/e_acosl.c
fsf/trunk/libc/sysdeps/i386/fpu/e_asin.S
fsf/trunk/libc/sysdeps/i386/fpu/libm-test-ulps
fsf/trunk/libc/sysdeps/x86_64/fpu/libm-test-ulps
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Tue May 1 00:01:33 2012
@@ -1,3 +1,45 @@
+2012-04-30 Joseph Myers <joseph@xxxxxxxxxxxxxxxx>
+
+ [BZ #13942]
+ * sysdeps/i386/fpu/e_acos.S (__ieee754_acos): Calculate 1 - x^2 as
+ (1 - x) * (1 + x).
+ * sysdeps/i386/fpu/e_acosl.c (__ieee754_acosl): Likewise.
+ * sysdeps/i386/fpu/e_asin.S (__ieee754_asin): Likewise.
+ * math/libm-test.inc (acos_test): Add more tests.
+ (asin_test): Likewise.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+ [BZ #14034]
+ * sysdeps/i386/fpu/e_acos.S (__ieee754_acos): Take absolute value
+ of square root.
+ * sysdeps/i386/fpu/e_acosf.S (__ieee754_acosf): Likewise.
+ * sysdeps/i386/fpu/e_acosl.c (__ieee754_acosl): Likewise.
+ * math/libm-test.inc (acos_test_tonearest): New function.
+ (acos_test_towardzero): Likewise.
+ (acos_test_downward): Likewise.
+ (acos_test_upward): Likewise.
+ (asin_test_tonearest): Likewise.
+ (asin_test_towardzero): Likewise.
+ (asin_test_downward): Likewise.
+ (asin_test_upward): Likewise.
+ (main): Call the new functions.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Update.
+
+ [BZ #13884]
+ [BZ #13924]
+ * math/e_exp10.c: Include <float.h>.
+ (__ieee754_exp10): Handle underflow here rather than multiplying
+ large negative argument by M_LN10.
+ * math/e_exp10f.c (__ieee754_exp10f): Call __ieee754_exp instead
+ of __ieee754_expf.
+ * math/e_exp10l.c: Include <float.h>.
+ (__ieee754_exp10l): Handle underflow here rather than multiplying
+ large negative argument by M_LN10l.
+ * math/libm-test.inc (exp10_test): Add another test. Do not allow
+ spurious overflow exception on underflow.
+
2012-04-29 Marek Polacek <polacek@xxxxxxxxxx>
* misc/sys/cdefs.h (__attribute_artificial__): New macro.
Modified: fsf/trunk/libc/NEWS
==============================================================================
--- fsf/trunk/libc/NEWS (original)
+++ fsf/trunk/libc/NEWS Tue May 1 00:01:33 2012
@@ -18,11 +18,11 @@
13525, 13526, 13527, 13528, 13529, 13530, 13531, 13532, 13533, 13547,
13551, 13552, 13553, 13555, 13559, 13566, 13583, 13592, 13618, 13637,
13656, 13658, 13673, 13691, 13695, 13704, 13705, 13706, 13726, 13738,
- 13739, 13760, 13761, 13786, 13792, 13806, 13824, 13840, 13841, 13844,
- 13846, 13851, 13852, 13854, 13871, 13872, 13873, 13879, 13883, 13886,
- 13892, 13895, 13908, 13910, 13911, 13912, 13913, 13915, 13916, 13917,
- 13918, 13919, 13920, 13921, 13926, 13927, 13928, 13938, 13941, 13963,
- 13967, 13970, 13973, 14027, 14033
+ 13739, 13758, 13760, 13761, 13786, 13792, 13806, 13824, 13840, 13841,
+ 13844, 13846, 13851, 13852, 13854, 13871, 13872, 13873, 13879, 13883,
+ 13886, 13892, 13895, 13908, 13910, 13911, 13912, 13913, 13915, 13916,
+ 13917, 13918, 13919, 13920, 13921, 13924, 13926, 13927, 13928, 13938,
+ 13941, 13942, 13963, 13967, 13970, 13973, 14027, 14033, 14034
* ISO C11 support:
Modified: fsf/trunk/libc/localedata/ChangeLog
==============================================================================
--- fsf/trunk/libc/localedata/ChangeLog (original)
+++ fsf/trunk/libc/localedata/ChangeLog Tue May 1 00:01:33 2012
@@ -1,3 +1,9 @@
+2012-04-29 Aurelien Jarno <aurelien@xxxxxxxxxxx>
+
+ [BZ #13758]
+ * locales/de_AT (LC_TIME): Change month name from "Feber" to
+ "Februar".
+
2012-04-12 Mike Frysinger <vapier@xxxxxxxxxx>
[BZ #3768]
Modified: fsf/trunk/libc/localedata/locales/de_AT
==============================================================================
--- fsf/trunk/libc/localedata/locales/de_AT (original)
+++ fsf/trunk/libc/localedata/locales/de_AT Tue May 1 00:01:33 2012
@@ -100,7 +100,7 @@
"<U0053><U0065><U0070>";"<U004F><U006B><U0074>";/
"<U004E><U006F><U0076>";"<U0044><U0065><U007A>"
mon "<U004A><U00E4><U006E><U006E><U0065><U0072>";/
- "<U0046><U0065><U0062><U0065><U0072>";/
+ "<U0046><U0065><U0062><U0072><U0075><U0041><U0072>";/
"<U004D><U00E4><U0072><U007A>";/
"<U0041><U0070><U0072><U0069><U006C>";/
"<U004D><U0061><U0069>";/
Modified: fsf/trunk/libc/math/e_exp10.c
==============================================================================
--- fsf/trunk/libc/math/e_exp10.c (original)
+++ fsf/trunk/libc/math/e_exp10.c Tue May 1 00:01:33 2012
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1998.
@@ -18,13 +18,16 @@
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
double
__ieee754_exp10 (double arg)
{
- /* This is a very stupid and inprecise implementation. It'll get
- replaced sometime (soon?). */
- return __ieee754_exp (M_LN10 * arg);
+ if (__finite (arg) && arg < DBL_MIN_10_EXP - DBL_DIG - 10)
+ return DBL_MIN * DBL_MIN;
+ else
+ /* This is a very stupid and inprecise implementation. It'll get
+ replaced sometime (soon?). */
+ return __ieee754_exp (M_LN10 * arg);
}
strong_alias (__ieee754_exp10, __exp10_finite)
Modified: fsf/trunk/libc/math/e_exp10f.c
==============================================================================
--- fsf/trunk/libc/math/e_exp10f.c (original)
+++ fsf/trunk/libc/math/e_exp10f.c Tue May 1 00:01:33 2012
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1998.
@@ -23,8 +23,10 @@
float
__ieee754_exp10f (float arg)
{
- /* This is a very stupid and inprecise implementation. It'll get
- replaced sometime (soon?). */
- return __ieee754_expf (M_LN10 * arg);
+ /* The argument to exp needs to be calculated in enough precision
+ that the fractional part has as much precision as float, in
+ addition to the bits in the integer part; using double ensures
+ this. */
+ return __ieee754_exp (M_LN10 * arg);
}
strong_alias (__ieee754_exp10f, __exp10f_finite)
Modified: fsf/trunk/libc/math/e_exp10l.c
==============================================================================
--- fsf/trunk/libc/math/e_exp10l.c (original)
+++ fsf/trunk/libc/math/e_exp10l.c Tue May 1 00:01:33 2012
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1998.
@@ -18,13 +18,16 @@
#include <math.h>
#include <math_private.h>
-
+#include <float.h>
long double
__ieee754_exp10l (long double arg)
{
- /* This is a very stupid and inprecise implementation. It'll get
- replaced sometime (soon?). */
- return __ieee754_expl (M_LN10l * arg);
+ if (__finitel (arg) && arg < LDBL_MIN_10_EXP - LDBL_DIG - 10)
+ return LDBL_MIN * LDBL_MIN;
+ else
+ /* This is a very stupid and inprecise implementation. It'll get
+ replaced sometime (soon?). */
+ return __ieee754_expl (M_LN10l * arg);
}
strong_alias (__ieee754_exp10l, __exp10l_finite)
Modified: fsf/trunk/libc/math/libm-test.inc
==============================================================================
--- fsf/trunk/libc/math/libm-test.inc (original)
+++ fsf/trunk/libc/math/libm-test.inc Tue May 1 00:01:33 2012
@@ -758,7 +758,139 @@
TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
+ TEST_f_f (acos, 0x0.ffffffp0L, 3.4526698471620358760324948263873649728491e-4L);
+ TEST_f_f (acos, -0x0.ffffffp0L, 3.1412473866050770348750401337968641476999L);
+#ifndef TEST_FLOAT
+ TEST_f_f (acos, 0x0.ffffffff8p0L, 1.5258789062648029736620564947844627548516e-5L);
+ TEST_f_f (acos, -0x0.ffffffff8p0L, 3.1415773948007305904329067627145550395696L);
+ TEST_f_f (acos, 0x0.ffffffffffffp0L, 8.4293697021788088529885473244391795127130e-8L);
+ TEST_f_f (acos, -0x0.ffffffffffffp0L, 3.1415925692960962166745548533940296398054L);
+#endif
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
+ TEST_f_f (acos, 0x0.ffffffffffffffffp0L, 3.2927225399135962333718255320079907245059e-10L);
+ TEST_f_f (acos, -0x0.ffffffffffffffffp0L, 3.1415926532605209844712837599423203309964L);
+#endif
END (acos);
+}
+
+
+static void
+acos_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(acos) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (acos_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_f_f (acos, 0, M_PI_2l);
+ TEST_f_f (acos, minus_zero, M_PI_2l);
+ TEST_f_f (acos, 1, 0);
+ TEST_f_f (acos, -1, M_PIl);
+ TEST_f_f (acos, 0.5, M_PI_6l*2.0);
+ TEST_f_f (acos, -0.5, M_PI_6l*4.0);
+ }
+
+ fesetround (save_round_mode);
+
+ END (acos_tonearest);
+}
+
+
+static void
+acos_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(acos) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (acos_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_f_f (acos, 0, M_PI_2l);
+ TEST_f_f (acos, minus_zero, M_PI_2l);
+ TEST_f_f (acos, 1, 0);
+ TEST_f_f (acos, -1, M_PIl);
+ TEST_f_f (acos, 0.5, M_PI_6l*2.0);
+ TEST_f_f (acos, -0.5, M_PI_6l*4.0);
+ }
+
+ fesetround (save_round_mode);
+
+ END (acos_towardzero);
+}
+
+
+static void
+acos_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(acos) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (acos_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_f_f (acos, 0, M_PI_2l);
+ TEST_f_f (acos, minus_zero, M_PI_2l);
+ TEST_f_f (acos, 1, 0);
+ TEST_f_f (acos, -1, M_PIl);
+ TEST_f_f (acos, 0.5, M_PI_6l*2.0);
+ TEST_f_f (acos, -0.5, M_PI_6l*4.0);
+ }
+
+ fesetround (save_round_mode);
+
+ END (acos_downward);
+}
+
+
+static void
+acos_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(acos) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (acos_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_f_f (acos, 0, M_PI_2l);
+ TEST_f_f (acos, minus_zero, M_PI_2l);
+ TEST_f_f (acos, 1, 0);
+ TEST_f_f (acos, -1, M_PIl);
+ TEST_f_f (acos, 0.5, M_PI_6l*2.0);
+ TEST_f_f (acos, -0.5, M_PI_6l*4.0);
+ }
+
+ fesetround (save_round_mode);
+
+ END (acos_upward);
}
static void
@@ -813,8 +945,140 @@
TEST_f_f (asin, 1.0, M_PI_2l);
TEST_f_f (asin, -1.0, -M_PI_2l);
TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
+ TEST_f_f (asin, 0x0.ffffffp0L, 1.5704510598101804156437184421571127056013L);
+ TEST_f_f (asin, -0x0.ffffffp0L, -1.5704510598101804156437184421571127056013L);
+#ifndef TEST_FLOAT
+ TEST_f_f (asin, 0x0.ffffffff8p0L, 1.5707810680058339712015850710748035974710L);
+ TEST_f_f (asin, -0x0.ffffffff8p0L, -1.5707810680058339712015850710748035974710L);
+ TEST_f_f (asin, 0x0.ffffffffffffp0L, 1.5707962425011995974432331617542781977068L);
+ TEST_f_f (asin, -0x0.ffffffffffffp0L, -1.5707962425011995974432331617542781977068L);
+#endif
+#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
+ TEST_f_f (asin, 0x0.ffffffffffffffffp0L, 1.5707963264656243652399620683025688888978L);
+ TEST_f_f (asin, -0x0.ffffffffffffffffp0L, -1.5707963264656243652399620683025688888978L);
+#endif
END (asin);
+}
+
+
+static void
+asin_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(asin) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (asin_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_f_f (asin, 0, 0);
+ TEST_f_f (asin, minus_zero, minus_zero);
+ TEST_f_f (asin, 0.5, M_PI_6l);
+ TEST_f_f (asin, -0.5, -M_PI_6l);
+ TEST_f_f (asin, 1.0, M_PI_2l);
+ TEST_f_f (asin, -1.0, -M_PI_2l);
+ }
+
+ fesetround (save_round_mode);
+
+ END (asin_tonearest);
+}
+
+
+static void
+asin_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(asin) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (asin_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_f_f (asin, 0, 0);
+ TEST_f_f (asin, minus_zero, minus_zero);
+ TEST_f_f (asin, 0.5, M_PI_6l);
+ TEST_f_f (asin, -0.5, -M_PI_6l);
+ TEST_f_f (asin, 1.0, M_PI_2l);
+ TEST_f_f (asin, -1.0, -M_PI_2l);
+ }
+
+ fesetround (save_round_mode);
+
+ END (asin_towardzero);
+}
+
+
+static void
+asin_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(asin) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (asin_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_f_f (asin, 0, 0);
+ TEST_f_f (asin, minus_zero, minus_zero);
+ TEST_f_f (asin, 0.5, M_PI_6l);
+ TEST_f_f (asin, -0.5, -M_PI_6l);
+ TEST_f_f (asin, 1.0, M_PI_2l);
+ TEST_f_f (asin, -1.0, -M_PI_2l);
+ }
+
+ fesetround (save_round_mode);
+
+ END (asin_downward);
+}
+
+
+static void
+asin_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(asin) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (asin_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_f_f (asin, 0, 0);
+ TEST_f_f (asin, minus_zero, minus_zero);
+ TEST_f_f (asin, 0.5, M_PI_6l);
+ TEST_f_f (asin, -0.5, -M_PI_6l);
+ TEST_f_f (asin, 1.0, M_PI_2l);
+ TEST_f_f (asin, -1.0, -M_PI_2l);
+ }
+
+ fesetround (save_round_mode);
+
+ END (asin_upward);
}
static void
@@ -3196,12 +3460,14 @@
TEST_f_f (exp10, nan_value, nan_value);
TEST_f_f (exp10, 3, 1000);
TEST_f_f (exp10, -1, 0.1L);
+#ifdef TEST_FLOAT /* Bug 13884: inaccurate results except for float. */
+ TEST_f_f (exp10, 36, 1.0e36L);
+#endif
TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
TEST_f_f (exp10, -1e6, 0);
#ifndef TEST_LDOUBLE /* Bug 13914: spurious exceptions. */
TEST_f_f (exp10, max_value, plus_infty, OVERFLOW_EXCEPTION);
- /* Bug 13924: spurious OVERFLOW exception may be present. */
- TEST_f_f (exp10, -max_value, 0, OVERFLOW_EXCEPTION_OK);
+ TEST_f_f (exp10, -max_value, 0);
#endif
TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
@@ -8192,7 +8458,15 @@
/* Trigonometric functions: */
acos_test ();
+ acos_test_tonearest ();
+ acos_test_towardzero ();
+ acos_test_downward ();
+ acos_test_upward ();
asin_test ();
+ asin_test_tonearest ();
+ asin_test_towardzero ();
+ asin_test_downward ();
+ asin_test_upward ();
atan_test ();
atan2_test ();
cos_test ();
Modified: fsf/trunk/libc/sysdeps/i386/fpu/e_acos.S
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/e_acos.S (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/e_acos.S Tue May 1 00:01:33 2012
@@ -7,14 +7,17 @@
RCSID("$NetBSD: e_acos.S,v 1.4 1995/05/08 23:44:37 jtc Exp $")
-/* acos = atan (sqrt(1 - x^2) / x) */
+/* acos = atan (sqrt((1-x) (1+x)) / x) */
ENTRY(__ieee754_acos)
fldl 4(%esp) /* x */
fld %st /* x : x */
- fmul %st(0) /* x^2 : x */
- fld1 /* 1 : x^2 : x */
- fsubp /* 1 - x^2 : x */
+ fld1 /* 1 : x : x */
+ fsubp /* 1 - x : x */
+ fld1 /* 1 : 1 - x : x */
+ fadd %st(2) /* 1 + x : 1 - x : x */
+ fmulp /* 1 - x^2 : x */
fsqrt /* sqrt (1 - x^2) : x */
+ fabs
fxch %st(1) /* x : sqrt (1 - x^2) */
fpatan /* atan (sqrt(1 - x^2) / x) */
ret
Modified: fsf/trunk/libc/sysdeps/i386/fpu/e_acosf.S
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/e_acosf.S (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/e_acosf.S Tue May 1 00:01:33 2012
@@ -16,6 +16,7 @@
fld1
fsubp /* 1 - x^2 */
fsqrt /* sqrt (1 - x^2) */
+ fabs
fxch %st(1)
fpatan
ret
Modified: fsf/trunk/libc/sysdeps/i386/fpu/e_acosl.c
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/e_acosl.c (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/e_acosl.c Tue May 1 00:01:33 2012
@@ -12,12 +12,15 @@
{
long double res;
- /* acosl = atanl (sqrtl(1 - x^2) / x) */
+ /* acosl = atanl (sqrtl((1-x) (1+x)) / x) */
asm ( "fld %%st\n"
- "fmul %%st(0)\n" /* x^2 */
"fld1\n"
- "fsubp\n" /* 1 - x^2 */
+ "fsubp\n"
+ "fld1\n"
+ "fadd %%st(2)\n"
+ "fmulp\n" /* 1 - x^2 */
"fsqrt\n" /* sqrtl (1 - x^2) */
+ "fabs\n"
"fxch %%st(1)\n"
"fpatan"
: "=t" (res) : "0" (x) : "st(1)");
Modified: fsf/trunk/libc/sysdeps/i386/fpu/e_asin.S
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/e_asin.S (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/e_asin.S Tue May 1 00:01:33 2012
@@ -7,13 +7,15 @@
RCSID("$NetBSD: e_asin.S,v 1.4 1995/05/08 23:45:40 jtc Exp $")
-/* asin = atan (x / sqrt(1 - x^2)) */
+/* asin = atan (x / sqrt((1-x) (1+x))) */
ENTRY(__ieee754_asin)
fldl 4(%esp) /* x */
fld %st
- fmul %st(0) /* x^2 */
- fld1
- fsubp /* 1 - x^2 */
+ fld1 /* 1 : x : x */
+ fsubp /* 1 - x : x */
+ fld1 /* 1 : 1 - x : x */
+ fadd %st(2) /* 1 + x : 1 - x : x */
+ fmulp /* 1 - x^2 */
fsqrt /* sqrt (1 - x^2) */
fpatan
ret
Modified: fsf/trunk/libc/sysdeps/i386/fpu/libm-test-ulps
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/libm-test-ulps (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/libm-test-ulps Tue May 1 00:01:33 2012
@@ -5,10 +5,87 @@
ildouble: 1
ldouble: 1
+# acos_downward
+Test "acos_downward (-0) == pi/2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "acos_downward (-0.5) == M_PI_6l*4.0":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "acos_downward (-1) == pi":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "acos_downward (0) == pi/2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "acos_downward (0.5) == M_PI_6l*2.0":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# acos_towardzero
+Test "acos_towardzero (-0) == pi/2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "acos_towardzero (-0.5) == M_PI_6l*4.0":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "acos_towardzero (-1) == pi":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "acos_towardzero (0) == pi/2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "acos_towardzero (0.5) == M_PI_6l*2.0":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# acos_upward
+Test "acos_upward (-0) == pi/2":
+double: 1
+idouble: 1
+Test "acos_upward (-0.5) == M_PI_6l*4.0":
+ildouble: 1
+ldouble: 1
+Test "acos_upward (-1) == pi":
+double: 1
+idouble: 1
+Test "acos_upward (0) == pi/2":
+double: 1
+idouble: 1
+Test "acos_upward (0.5) == M_PI_6l*2.0":
+ildouble: 1
+ldouble: 1
+
# asin
Test "asin (-0.5) == -pi/6":
ildouble: 1
ldouble: 1
+Test "asin (-0x0.ffffffff8p0) == -1.5707810680058339712015850710748035974710":
+ildouble: 1
+ldouble: 1
+Test "asin (-0x0.ffffffp0) == -1.5704510598101804156437184421571127056013":
+ildouble: 1
+ldouble: 1
Test "asin (-1.0) == -pi/2":
ildouble: 1
ldouble: 1
@@ -18,7 +95,83 @@
Test "asin (0.75) == 0.848062078981481008052944338998418080":
ildouble: 1
ldouble: 1
+Test "asin (0x0.ffffffff8p0) == 1.5707810680058339712015850710748035974710":
+ildouble: 1
+ldouble: 1
+Test "asin (0x0.ffffffp0) == 1.5704510598101804156437184421571127056013":
+ildouble: 1
+ldouble: 1
Test "asin (1.0) == pi/2":
+ildouble: 1
+ldouble: 1
+
+# asin_downward
+Test "asin_downward (-0.5) == -pi/6":
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-1.0) == -pi/2":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (0.5) == pi/6":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (1.0) == pi/2":
+float: 1
+ifloat: 1
+
+# asin_tonearest
+Test "asin_tonearest (-0.5) == -pi/6":
+ildouble: 1
+ldouble: 1
+Test "asin_tonearest (0.5) == pi/6":
+ildouble: 1
+ldouble: 1
+
+# asin_towardzero
+Test "asin_towardzero (-0.5) == -pi/6":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-1.0) == -pi/2":
+float: 1
+ifloat: 1
+Test "asin_towardzero (0.5) == pi/6":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (1.0) == pi/2":
+float: 1
+ifloat: 1
+
+# asin_upward
+Test "asin_upward (-0.5) == -pi/6":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-1.0) == -pi/2":
+float: 1
+ifloat: 1
+Test "asin_upward (0.5) == pi/6":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (1.0) == pi/2":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
@@ -2132,7 +2285,57 @@
ildouble: 1
ldouble: 1
+Function: "acos_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "acos_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "acos_upward":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
Function: "asin":
+ildouble: 1
+ldouble: 1
+
+Function: "asin_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "asin_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "asin_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "asin_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
Modified: fsf/trunk/libc/sysdeps/x86_64/fpu/libm-test-ulps
==============================================================================
--- fsf/trunk/libc/sysdeps/x86_64/fpu/libm-test-ulps (original)
+++ fsf/trunk/libc/sysdeps/x86_64/fpu/libm-test-ulps Tue May 1 00:01:33 2012
@@ -5,10 +5,62 @@
ildouble: 1
ldouble: 1
+# acos_downward
+Test "acos_downward (-0) == pi/2":
+ildouble: 1
+ldouble: 1
+Test "acos_downward (-0.5) == M_PI_6l*4.0":
+double: 1
+idouble: 1
+Test "acos_downward (-1) == pi":
+ildouble: 1
+ldouble: 1
+Test "acos_downward (0) == pi/2":
+ildouble: 1
+ldouble: 1
+Test "acos_downward (0.5) == M_PI_6l*2.0":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# acos_towardzero
+Test "acos_towardzero (-0) == pi/2":
+ildouble: 1
+ldouble: 1
+Test "acos_towardzero (-0.5) == M_PI_6l*4.0":
+double: 1
+idouble: 1
+Test "acos_towardzero (-1) == pi":
+ildouble: 1
+ldouble: 1
+Test "acos_towardzero (0) == pi/2":
+ildouble: 1
+ldouble: 1
+Test "acos_towardzero (0.5) == M_PI_6l*2.0":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# acos_upward
+Test "acos_upward (-0.5) == M_PI_6l*4.0":
+ildouble: 1
+ldouble: 1
+Test "acos_upward (0.5) == M_PI_6l*2.0":
+ildouble: 1
+ldouble: 1
+
# asin
Test "asin (-0.5) == -pi/6":
ildouble: 1
ldouble: 1
+Test "asin (-0x0.ffffffffffffffffp0) == -1.5707963264656243652399620683025688888978":
+ildouble: 1
+ldouble: 1
+Test "asin (-0x0.ffffffffffffp0) == -1.5707962425011995974432331617542781977068":
+ildouble: 1
+ldouble: 1
Test "asin (-1.0) == -pi/2":
ildouble: 1
ldouble: 1
@@ -18,7 +70,79 @@
Test "asin (0.75) == 0.848062078981481008052944338998418080":
ildouble: 1
ldouble: 1
+Test "asin (0x0.ffffffffffffffffp0) == 1.5707963264656243652399620683025688888978":
+ildouble: 1
+ldouble: 1
+Test "asin (0x0.ffffffffffffp0) == 1.5707962425011995974432331617542781977068":
+ildouble: 1
+ldouble: 1
Test "asin (1.0) == pi/2":
+ildouble: 1
+ldouble: 1
+
+# asin_downward
+Test "asin_downward (-0.5) == -pi/6":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (0.5) == pi/6":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (1.0) == pi/2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# asin_tonearest
+Test "asin_tonearest (-0.5) == -pi/6":
+ildouble: 1
+ldouble: 1
+Test "asin_tonearest (-1.0) == -pi/2":
+ildouble: 1
+ldouble: 1
+Test "asin_tonearest (0.5) == pi/6":
+ildouble: 1
+ldouble: 1
+Test "asin_tonearest (1.0) == pi/2":
+ildouble: 1
+ldouble: 1
+
+# asin_towardzero
+Test "asin_towardzero (-0.5) == -pi/6":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-1.0) == -pi/2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (0.5) == pi/6":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (1.0) == pi/2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# asin_upward
+Test "asin_upward (-0.5) == -pi/6":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-1.0) == -pi/2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0.5) == pi/6":
ildouble: 1
ldouble: 1
@@ -2078,7 +2202,53 @@
ildouble: 1
ldouble: 1
+Function: "acos_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "acos_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "acos_upward":
+ildouble: 1
+ldouble: 1
+
Function: "asin":
+ildouble: 1
+ldouble: 1
+
+Function: "asin_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "asin_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "asin_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "asin_upward":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
_______________________________________________
Commits mailing list
Commits@xxxxxxxxxx
http://eglibc.org/cgi-bin/mailman/listinfo/commits