From 15daa63995211cbe576b28f88ad70f57abe69a37 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 24 Oct 1999 22:04:52 +0000 Subject: Update. 1999-10-24 Ulrich Drepper * math/libm-test.inc: Disable some boundary case tests for inline function testing. * math/math.h: Pretty printing. * sysdeps/i386/fpu/e_atanh.S: Correct handling of NaN. * sysdeps/i386/fpu/e_atanhf.S: Likewise. * sysdeps/i386/fpu/e_atanhl.S: Likewise. * sysdeps/i386/fpu/e_log10.S: Likewise. * sysdeps/i386/fpu/e_log10f.S: Likewise. * sysdeps/i386/fpu/e_log10l.S: Likewise. * sysdeps/i386/fpu/s_log1p.S: Likewise. * sysdeps/i386/fpu/s_log1pf.S: Likewise. * sysdeps/i386/fpu/s_log1pl.S: Likewise. * sysdeps/i386/fpu/s_log2.S: Likewise. * sysdeps/i386/fpu/s_log2f.S: Likewise. * sysdeps/i386/fpu/s_log2l.S: Likewise. * sysdeps/i386/fpu/libm-test-ulps: New file. * sysdeps/i386/fpu/bits/mathinline.h (__expm1_code): Correct return value for x == 0. (pow): Correct case x == 0. (__sgn1l): Correct handling of -0.0. 1999-10-22 Andreas Jaeger * math/libm-test.inc (asinh_test): Add test for NaN as input parameter. (atan_test): Likewise. (atanh_test): Likewise. (atan2_test): Likewise. (carg_test): Likewise. (ceil_test): Likewise. (cos_test): Likewise. (cosh_test): Likewise. (cpow_test): Likewise. (erf_test): Likewise. (erfc_test): Likewise. (exp_test): Likewise. (exp10_test): Likewise. (exp2_test): Likewise. (expm1_test): Likewise. (fabs_test): Likewise. (floor_test): Likewise. (fmod_test): Likewise. (gamma_test): Likewise. (lgamma_test): Likewise. (log10_test): Likewise. (log1p_test): Likewise. (log2_test): Likewise. (logb_test): Likewise. (nearbyint_test): Likewise. (remainder_test): Likewise. (remquo_test): Likewise. (sin_test): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (sqrt_test): Likewise. (tan_test): Likewise. (tanh_test): Likewise. (tgamma_test): Likewise. --- sysdeps/i386/fpu/bits/mathinline.h | 19 +- sysdeps/i386/fpu/e_atanh.S | 15 +- sysdeps/i386/fpu/e_atanhf.S | 11 +- sysdeps/i386/fpu/e_atanhl.S | 16 +- sysdeps/i386/fpu/e_log10.S | 11 +- sysdeps/i386/fpu/e_log10f.S | 11 +- sysdeps/i386/fpu/e_log10l.S | 11 +- sysdeps/i386/fpu/libm-test-ulps | 1428 ++++++++++++++++++++++++++++++++++++ sysdeps/i386/fpu/s_log1p.S | 11 +- sysdeps/i386/fpu/s_log1pf.S | 11 +- sysdeps/i386/fpu/s_log1pl.S | 10 + sysdeps/i386/fpu/s_log2.S | 11 +- sysdeps/i386/fpu/s_log2f.S | 11 +- sysdeps/i386/fpu/s_log2l.S | 11 +- 14 files changed, 1572 insertions(+), 15 deletions(-) create mode 100644 sysdeps/i386/fpu/libm-test-ulps (limited to 'sysdeps/i386') diff --git a/sysdeps/i386/fpu/bits/mathinline.h b/sysdeps/i386/fpu/bits/mathinline.h index bf077ba527..8545f6536c 100644 --- a/sysdeps/i386/fpu/bits/mathinline.h +++ b/sysdeps/i386/fpu/bits/mathinline.h @@ -324,7 +324,7 @@ __sincosl (long double __x, long double *__sinx, long double *__cosx) ("fscale # 2^int(x * log2(e))\n\t" \ : "=t" (__temp) : "0" (1.0), "u" (__exponent)); \ __temp -= 1.0; \ - return __temp + __value + return __temp + __value ?: __x __inline_mathcode_ (long double, __expm1l, __x, __expm1_code) @@ -383,8 +383,14 @@ __inline_mathcode2 (pow, __x, __y, \ register long double __value; \ register long double __exponent; \ __extension__ long long int __p = (long long int) __y; \ - if (__x == 0.0 && __y > 0.0) \ - return 0.0; \ + if (__x == 0.0) \ + { \ + if (__y > 0.0) \ + return __y == (double) __p && (__p & 1) != 0 ? __x : 0.0; \ + else if (__y < 0.0) \ + return (__y == (double) __p && (-__p & 1) != 0 \ + ? 1.0 / __x : 1.0 / fabs (__x)); \ + } \ if (__y == (double) __p) \ { \ long double __r = 1.0; \ @@ -448,7 +454,12 @@ __inline_mathop_decl (log10, "fldlg2; fxch; fyl2x", "0" (__x) : "st(1)") __inline_mathcode (asin, __x, return __atan2l (__x, __sqrtl (1.0 - __x * __x))) __inline_mathcode (acos, __x, return __atan2l (__sqrtl (1.0 - __x * __x), __x)) -__inline_mathcode_ (long double, __sgn1l, __x, return __x >= 0.0 ? 1.0 : -1.0) +__inline_mathcode_ (long double, __sgn1l, __x, \ + union { long double __xld; unsigned int __xi[3]; } __n = { .__xld = __x }; \ + __n.__xi[2] = (__n.__xi[2] & 0x8000) | 0x3fff; \ + __n.__xi[1] = 0x80000000; \ + __n.__xi[0] = 0; \ + return __n.__xld) /* The argument range of the inline version of sinhl is slightly reduced. */ diff --git a/sysdeps/i386/fpu/e_atanh.S b/sysdeps/i386/fpu/e_atanh.S index 231e96f57f..3cd0362459 100644 --- a/sysdeps/i386/fpu/e_atanh.S +++ b/sysdeps/i386/fpu/e_atanh.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arctanh function. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -50,6 +50,12 @@ ln2_2: .tfloat 0.3465735902799726547086160 ENTRY(__ieee754_atanh) movl 8(%esp), %ecx + movl %ecx, %eax + andl $0x7fffffff, %eax + cmpl $0x7ff00000, %eax + jae 5f +7: + #ifdef PIC call 1f 1: popl %edx @@ -98,4 +104,11 @@ ENTRY(__ieee754_atanh) jecxz 3f fchs // 0.5*ln2*ld((1+x)/(1-x)) 3: ret + + // x == NaN or ħInf +5: ja 6f + cmpl $0, 4(%esp) + je 7b +6: fldl 4(%esp) + ret END(__ieee754_atanh) diff --git a/sysdeps/i386/fpu/e_atanhf.S b/sysdeps/i386/fpu/e_atanhf.S index 687d4c97fb..46f2c8dab4 100644 --- a/sysdeps/i386/fpu/e_atanhf.S +++ b/sysdeps/i386/fpu/e_atanhf.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arctanh function. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -51,6 +51,11 @@ ln2_2: .tfloat 0.3465735902799726547086160 ENTRY(__ieee754_atanhf) movl 4(%esp), %ecx + movl %ecx, %eax + andl $0x7fffffff, %eax + cmpl $0x7f800000, %eax + ja 5f + #ifdef PIC call 1f 1: popl %edx @@ -99,4 +104,8 @@ ENTRY(__ieee754_atanhf) jecxz 3f fchs // 0.5*ln2*ld((1+x)/(1-x)) 3: ret + + // x == NaN +5: flds 4(%esp) + ret END(__ieee754_atanhf) diff --git a/sysdeps/i386/fpu/e_atanhl.S b/sysdeps/i386/fpu/e_atanhl.S index 8a2bd11ce4..5100d1046c 100644 --- a/sysdeps/i386/fpu/e_atanhl.S +++ b/sysdeps/i386/fpu/e_atanhl.S @@ -1,5 +1,5 @@ /* ix87 specific implementation of arctanh function. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -57,6 +57,12 @@ ln2_2: .tfloat 0.3465735902799726547086160 ENTRY(__ieee754_atanhl) movl 12(%esp), %ecx + movl %ecx, %eax + andl $0x7fff, %eax + cmpl $0x7fff, %eax + je 5f +7: + #ifdef PIC call 1f 1: popl %edx @@ -105,4 +111,12 @@ ENTRY(__ieee754_atanhl) jecxz 3f fchs // 0.5*ln2*ld((1+x)/(1-x)) 3: ret + + // x == NaN or ħInf +5: cmpl $0x80000000, 8(%esp) + ja 6f + cmpl $0, 4(%esp) + je 7b +6: fldt 4(%esp) + ret END(__ieee754_atanhl) diff --git a/sysdeps/i386/fpu/e_log10.S b/sysdeps/i386/fpu/e_log10.S index 2c8488c3a9..e93184c219 100644 --- a/sysdeps/i386/fpu/e_log10.S +++ b/sysdeps/i386/fpu/e_log10.S @@ -41,8 +41,12 @@ ENTRY(__ieee754_log10) 1: popl %edx addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx #endif + fxam + fnstsw fld %st // x : x : log10(2) - fsubl MO(one) // x-1 : x : log10(2) + sahf + jc 3f // in case x is NaN or ħInf +4: fsubl MO(one) // x-1 : x : log10(2) fld %st // x-1 : x-1 : x : log10(2) fabs // |x-1| : x-1 : x : log10(2) fcompl MO(limit) // x-1 : x : log10(2) @@ -56,4 +60,9 @@ ENTRY(__ieee754_log10) 2: fstp %st(0) // x : log10(2) fyl2x // log10(x) ret + +3: jp 4b // in case x is ħInf + fstp %st(1) + fstp %st(1) + ret END (__ieee754_log10) diff --git a/sysdeps/i386/fpu/e_log10f.S b/sysdeps/i386/fpu/e_log10f.S index 2c07161085..0a89f54784 100644 --- a/sysdeps/i386/fpu/e_log10f.S +++ b/sysdeps/i386/fpu/e_log10f.S @@ -42,8 +42,12 @@ ENTRY(__ieee754_log10f) 1: popl %edx addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx #endif + fxam + fnstsw fld %st // x : x : log10(2) - fsubl MO(one) // x-1 : x : log10(2) + sahf + jc 3f // in case x is NaN or ħInf +4: fsubl MO(one) // x-1 : x : log10(2) fld %st // x-1 : x-1 : x : log10(2) fabs // |x-1| : x-1 : x : log10(2) fcompl MO(limit) // x-1 : x : log10(2) @@ -57,4 +61,9 @@ ENTRY(__ieee754_log10f) 2: fstp %st(0) // x : log10(2) fyl2x // log10(x) ret + +3: jp 4b // in case x is ħInf + fstp %st(1) + fstp %st(1) + ret END (__ieee754_log10f) diff --git a/sysdeps/i386/fpu/e_log10l.S b/sysdeps/i386/fpu/e_log10l.S index 6fe7c5a6f7..25d3501663 100644 --- a/sysdeps/i386/fpu/e_log10l.S +++ b/sysdeps/i386/fpu/e_log10l.S @@ -43,8 +43,12 @@ ENTRY(__ieee754_log10l) 1: popl %edx addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx #endif + fxam + fnstsw fld %st // x : x : log10(2) - fsubl MO(one) // x-1 : x : log10(2) + sahf + jc 3f // in case x is NaN or ħInf +4: fsubl MO(one) // x-1 : x : log10(2) fld %st // x-1 : x-1 : x : log10(2) fabs // |x-1| : x-1 : x : log10(2) fcompl MO(limit) // x-1 : x : log10(2) @@ -58,4 +62,9 @@ ENTRY(__ieee754_log10l) 2: fstp %st(0) // x : log10(2) fyl2x // log10(x) ret + +3: jp 4b // in case x is ħInf + fstp %st(1) + fstp %st(1) + ret END(__ieee754_log10l) diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps new file mode 100644 index 0000000000..c31b010e3e --- /dev/null +++ b/sysdeps/i386/fpu/libm-test-ulps @@ -0,0 +1,1428 @@ +# Begin of automatic generation + +# acos +Test "acos (0.7) == 0.7953988301841435554": +ildouble: 1149 +ldouble: 1149 + +# asin +Test "asin (0.7) == 0.7753974966107530637": +double: 1 +ildouble: 1147 +ldouble: 1147 + +# asinh +Test "asinh (-0) == -0": +idouble: 0 +ifloat: 0 +ildouble: 0 +Test "asinh (0.7) == 0.652666566082355786": +ildouble: 656 +ldouble: 656 + +# atan +Test "atan (0.7) == 0.6107259643892086165": +ildouble: 549 +ldouble: 549 + +# atan2 +Test "atan2 (0.4, 0.0003) == 1.5700463269355215718": +ildouble: 1 +ldouble: 1 +Test "atan2 (0.7, 1) == 0.6107259643892086165": +ildouble: 549 +ldouble: 549 + +# atanh +Test "atanh (-0) == -0": +idouble: 0 +ifloat: 0 +ildouble: 0 +Test "atanh (0.7) == 0.8673005276940531944": +double: 1 +idouble: 1 +ildouble: 1605 +ldouble: 1605 + +# cabs +Test "cabs (-0.7 + 12.4 i) == 12.41974234837422060118": +float: 1 +ifloat: 1 +Test "cabs (-0.7 - 12.4 i) == 12.41974234837422060118": +float: 1 +ifloat: 1 +Test "cabs (-12.4 + 0.7 i) == 12.41974234837422060118": +float: 1 +ifloat: 1 +Test "cabs (-12.4 - 0.7 i) == 12.41974234837422060118": +float: 1 +ifloat: 1 +Test "cabs (0.7 + 1.2 i) == 1.3892443989449804508": +double: 1 +idouble: 1 +ildouble: 560 +ldouble: 560 +Test "cabs (0.7 + 12.4 i) == 12.41974234837422060118": +float: 1 +ifloat: 1 + +# cacos +Test "Real part of: cacos (-2 - 3 i) == 2.1414491111159960199 + 1.9833870299165354323 i": +Test "Imaginary part of: cacos (-2 - 3 i) == 2.1414491111159960199 + 1.9833870299165354323 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 151 +ldouble: 151 +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +float: 2 +ifloat: 2 +ildouble: 329 +ldouble: 329 + +# cacosh +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 +ildouble: 5 +ldouble: 5 +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +double: 1 +idouble: 1 +ildouble: 328 +ldouble: 328 +Test "Imaginary part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +ildouble: 151 +ldouble: 151 + +# casin +Test "Real part of: casin (-2 - 3 i) == -0.5706527843210994007 - 1.9833870299165354323 i": +Test "Imaginary part of: casin (-2 - 3 i) == -0.5706527843210994007 - 1.9833870299165354323 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 +ildouble: 603 +ldouble: 603 +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +float: 2 +ifloat: 2 +ildouble: 329 +ldouble: 329 + +# casinh +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +double: 5 +float: 1 +idouble: 5 +ifloat: 1 +ildouble: 6 +ldouble: 6 +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +double: 3 +float: 6 +idouble: 3 +ifloat: 6 +ildouble: 6 +ldouble: 6 +Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +ildouble: 892 +ldouble: 892 +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +float: 1 +ifloat: 1 +ildouble: 12 +ldouble: 12 + +# catan +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 7 +ldouble: 7 +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +ildouble: 251 +ldouble: 251 +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +float: 1 +ifloat: 1 +ildouble: 474 +ldouble: 474 + +# catanh +Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +ildouble: 66 +ldouble: 66 +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +ildouble: 447 +ldouble: 447 + +# cbrt +Test "cbrt (-0.001) == -0.1": +ildouble: 716 +ldouble: 716 +Test "cbrt (-27.0) == -3.0": +ildouble: 1 +ldouble: 1 +Test "cbrt (0.7) == 0.8879040017426007084": +double: 1 +idouble: 1 +ildouble: 346 +ldouble: 346 +Test "cbrt (0.970299) == 0.99": +ildouble: 306 +ldouble: 306 + +# ccos +Test "Real part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i": +Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 5 +ldouble: 5 +Test "Imaginary part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i": +double: 1 +idouble: 1 +ildouble: 1901 +ldouble: 1901 + +# ccosh +Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i": +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1467 +ldouble: 1467 +Test "Imaginary part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i": +ildouble: 1183 +ldouble: 1183 + +# cexp +Test "Real part of: cexp (-2.0 - 3.0 i) == -0.1339809149295426134 - 0.0190985162611351964 i": +ildouble: 4 +ldouble: 4 +Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.1339809149295426134 - 0.0190985162611351964 i": +ildouble: 18 +ldouble: 18 +Test "Real part of: cexp (0.7 + 1.2 i) == 0.7296989091503236012 + 1.8768962328348102821 i": +float: 1 +ifloat: 1 +ildouble: 940 +ldouble: 940 +Test "Imaginary part of: cexp (0.7 + 1.2 i) == 0.7296989091503236012 + 1.8768962328348102821 i": +ildouble: 1067 +ldouble: 1067 + +# clog +Test "Real part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +ildouble: 1 +ldouble: 1 + +# clog10 +Test "Real part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i": +Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i": +Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i": +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": +Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i": +Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i": +Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i": +Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i": +Test "Imaginary part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i": +double: 1 +idouble: 1 +Test "Real part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i": +Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i": +Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i": +Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i": +Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1402 +ldouble: 1402 +Test "Imaginary part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i": +double: 1 +idouble: 1 +ildouble: 186 +ldouble: 186 +Test "Real part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i": +Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i": +Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i": +Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i": +Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# cos +Test "cos (0.7) == 0.7648421872844884262": +double: 1 +idouble: 1 +ildouble: 529 +ldouble: 529 +Test "cos (M_PI_6l * 2.0) == 0.5": +double: 1 +float: 0.5 +idouble: 1 +ifloat: 0.5 +Test "cos (M_PI_6l * 4.0) == -0.5": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 0.5 +ldouble: 0.5 +Test "cos (pi/2) == 0": +double: 0.2758 +float: 0.3667 +idouble: 0.2758 +ifloat: 0.3667 +ildouble: 0.25 +ldouble: 0.25 + +# cosh +Test "cosh (0.7) == 1.255169005630943018": +ildouble: 309 +ldouble: 309 + +# cpow +Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 +Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Real part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i": +Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i": +double: 1.104 +float: 2.5333 +idouble: 1.104 +ifloat: 2.5333 +ildouble: 1 +ldouble: 1 + +# csin +Test "Real part of: csin (0.7 + 1.2 i) == 1.1664563419657581376 + 1.1544997246948547371 i": +ildouble: 966 +ldouble: 966 +Test "Imaginary part of: csin (0.7 + 1.2 i) == 1.1664563419657581376 + 1.1544997246948547371 i": +ildouble: 168 +ldouble: 168 + +# csinh +Test "Real part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i": +double: 1 +idouble: 1 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Real part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 413 +ldouble: 413 +Test "Imaginary part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i": +ildouble: 477 +ldouble: 477 + +# csqrt +Test "Real part of: csqrt (-2 + 3 i) == 0.8959774761298381247 + 1.6741492280355400404 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csqrt (-2 + 3 i) == 0.8959774761298381247 + 1.6741492280355400404 i": +Test "Real part of: csqrt (-2 - 3 i) == 0.8959774761298381247 - 1.6741492280355400404 i": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csqrt (-2 - 3 i) == 0.8959774761298381247 - 1.6741492280355400404 i": +Test "Real part of: csqrt (0.7 + 1.2 i) == 1.0220676100300264507 + 0.5870453129635652115 i": +double: 1 +idouble: 1 +ildouble: 237 +ldouble: 237 +Test "Imaginary part of: csqrt (0.7 + 1.2 i) == 1.0220676100300264507 + 0.5870453129635652115 i": +ildouble: 128 +ldouble: 128 + +# ctan +Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i": +ildouble: 437 +ldouble: 437 +Test "Imaginary part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 690 +ldouble: 690 +Test "Imaginary part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i": +double: 1 +idouble: 1 +ildouble: 367 +ldouble: 367 + +# ctanh +Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i": +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i": +ildouble: 23 +ldouble: 23 +Test "Real part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i": +Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i": +double: 0.5 +idouble: 0.5 +Test "Real part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i": +float: 1 +ifloat: 1 +ildouble: 286 +ldouble: 286 +Test "Imaginary part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i": +double: 1 +idouble: 1 +ildouble: 3074 +ldouble: 3074 + +# erfc +Test "erfc (0.7) == 0.32219880616258152702": +double: 1 +idouble: 1 +Test "erfc (1.2) == 0.089686021770364619762": +float: 1 +ifloat: 1 +Test "erfc (2.0) == 0.0046777349810472658379": +double: 1 +idouble: 1 +Test "erfc (4.1) == 0.67000276540848983727e-8": +double: 24 +float: 12 +idouble: 24 +ifloat: 12 + +# exp +Test "exp (0.7) == 2.0137527074704765216": +ildouble: 412 +ldouble: 412 + +# exp10 +Test "exp10 (-1) == 0.1": +ildouble: 818 +ldouble: 818 +Test "exp10 (0.7) == 5.0118723362727228500": +double: 1 +idouble: 1 +ildouble: 1182 +ldouble: 1182 +Test "exp10 (3) == 1000": +ildouble: 8 +ldouble: 8 + +# exp2 +Test "exp2 (0.7) == 1.6245047927124710452": +ildouble: 462 +ldouble: 462 + +# expm1 +Test "expm1 (-0) == -0": +idouble: 0 +ifloat: 0 +ildouble: 0 +Test "expm1 (0.7) == 1.0137527074704765216": +ildouble: 825 +ldouble: 825 + +# fmod +Test "fmod (-6.5, -2.3) == -1.9": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4096 +ldouble: 4096 +Test "fmod (-6.5, 2.3) == -1.9": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4096 +ldouble: 4096 +Test "fmod (6.5, -2.3) == 1.9": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4096 +ldouble: 4096 +Test "fmod (6.5, 2.3) == 1.9": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4096 +ldouble: 4096 + +# hypot +Test "hypot (-0.7, -12.4) == 12.41974234837422060118": +float: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (-0.7, 12.4) == 12.41974234837422060118": +float: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (-12.4, -0.7) == 12.41974234837422060118": +float: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (-12.4, 0.7) == 12.41974234837422060118": +float: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (0.7, -12.4) == 12.41974234837422060118": +float: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (0.7, 1.2) == 1.3892443989449804508": +double: 1 +ildouble: 560 +ldouble: 560 +Test "hypot (0.7, 12.4) == 12.41974234837422060118": +float: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (12.4, -0.7) == 12.41974234837422060118": +float: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (12.4, 0.7) == 12.41974234837422060118": +float: 1 +ildouble: 406 +ldouble: 406 + +# j0 +Test "j0 (10.0) == -0.24593576445134833520": +float: 1 +ifloat: 1 +Test "j0 (2.0) == 0.22389077914123566805": +float: 1 +ifloat: 1 +Test "j0 (8.0) == 0.17165080713755390609": +float: 1 +ifloat: 1 + +# j1 +Test "j1 (10.0) == 0.043472746168861436670": +float: 1 +ifloat: 1 +Test "j1 (2.0) == 0.57672480775687338720": +double: 1 +idouble: 1 +Test "j1 (8.0) == 0.23463634685391462438": +float: 1 +ifloat: 1 + +# jn +Test "jn (0, 10.0) == -0.24593576445134833520": +float: 1 +ifloat: 1 +Test "jn (0, 2.0) == 0.22389077914123566805": +float: 1 +ifloat: 1 +Test "jn (0, 8.0) == 0.17165080713755390609": +float: 1 +ifloat: 1 +Test "jn (1, 10.0) == 0.043472746168861436670": +float: 1 +ifloat: 1 +Test "jn (1, 2.0) == 0.57672480775687338720": +double: 1 +idouble: 1 +Test "jn (1, 8.0) == 0.23463634685391462438": +float: 1 +ifloat: 1 +Test "jn (10, 0.1) == 0.26905328954342155795e-19": +double: 4 +float: 2 +idouble: 4 +ifloat: 2 +Test "jn (10, 0.7) == 0.75175911502153953928e-11": +double: 3 +float: 1 +idouble: 3 +ifloat: 1 +Test "jn (10, 10.0) == 0.20748610663335885770": +float: 1 +ifloat: 1 +Test "jn (3, 0.1) == 0.000020820315754756261429": +double: 1 +idouble: 1 +Test "jn (3, 0.7) == 0.0069296548267508408077": +double: 2 +idouble: 2 +Test "jn (3, 10.0) == 0.058379379305186812343": +float: 1 +ifloat: 1 + +# lgamma +Test "lgamma (0.7) == 0.26086724653166651439": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "lgamma (1.2) == -0.853740900033158497197e-1": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +# log +Test "log (0.7) == -0.35667494393873237891": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2341 +ldouble: 2341 +Test "log (e) == 1": +float: 0.5 +ifloat: 0.5 + +# log10 +Test "log10 (0.7) == -0.15490195998574316929": +double: 1 +idouble: 1 +ildouble: 2033 +ldouble: 2033 +Test "log10 (e) == log10(e)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +# log1p +Test "log1p (-0.3) == -0.35667494393873237891": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 585 +ldouble: 585 + +# log2 +Test "log2 (0.7) == -0.51457317282975824043": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1688 +ldouble: 1688 + +# nexttoward +Test "nexttoward (-0, 0) == 0": +double: 0 +idouble: 0 +Test "nexttoward (0, -0) == -0": +double: 0 +idouble: 0 + +# pow +Test "pow (-0, 1) == -0": +idouble: 0 +ifloat: 0 +ildouble: 0 +Test "pow (-0, 11) == -0": +idouble: 0 +ifloat: 0 +ildouble: 0 +Test "pow (-0, 27) == -0": +idouble: 0 +ifloat: 0 +ildouble: 0 +Test "pow (0.7, 1.2) == 0.65180494056638638188": +ildouble: 725 +ldouble: 725 + +# sin +Test "sin (0.7) == 0.64421768723769105367": +ildouble: 627 +ldouble: 627 + +# sincos +Test "sincos (0.7, &sin_res, &cos_res) puts 0.64421768723769105367 in sin_res": +ildouble: 627 +ldouble: 627 +Test "sincos (0.7, &sin_res, &cos_res) puts 0.76484218728448842626 in cos_res": +double: 1 +idouble: 1 +ildouble: 528 +ldouble: 528 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": +double: 1 +float: 0.5 +idouble: 1 +ifloat: 0.5 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.866025403784438646764 in sin_res": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res": +double: 0.2758 +float: 0.3667 +idouble: 0.2758 +ifloat: 0.3667 +ildouble: 0.25 +ldouble: 0.25 + +# sinh +Test "sinh (-0) == -0": +idouble: 0 +ifloat: 0 +ildouble: 0 +Test "sinh (0.7) == 0.75858370183953350346": +float: 1 +ifloat: 1 +ildouble: 1028 +ldouble: 1029 + +# sqrt +Test "sqrt (0.7) == 0.83666002653407554798": +ildouble: 489 +ldouble: 489 +Test "sqrt (15239.9025) == 123.45": +ildouble: 325 +ldouble: 325 + +# tan +Test "tan (0.7) == 0.84228838046307944813": +ildouble: 1401 +ldouble: 1401 +Test "tan (pi/4) == 1": +double: 0.5 +idouble: 0.5 + +# tanh +Test "tanh (-0) == -0": +idouble: 0 +ifloat: 0 +ildouble: 0 +Test "tanh (0.7) == 0.60436777711716349631": +ildouble: 521 +ldouble: 521 + +# tgamma +Test "tgamma (-0.5) == -2 sqrt (pi)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "tgamma (0.5) == sqrt (pi)": +float: 1 +ifloat: 1 +Test "tgamma (0.7) == 1.29805533264755778568": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# y0 +Test "y0 (0.1) == -1.5342386513503668441": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "y0 (0.7) == -0.19066492933739506743": +double: 2 +idouble: 2 +Test "y0 (1.0) == 0.088256964215676957983": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "y0 (1.5) == 0.38244892379775884396": +float: 1 +ifloat: 1 +Test "y0 (10.0) == 0.055671167283599391424": +float: 1 +ifloat: 1 +Test "y0 (8.0) == 0.22352148938756622053": +float: 1 +ifloat: 1 + +# y1 +Test "y1 (0.1) == -6.4589510947020269877": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "y1 (0.7) == -1.1032498719076333697": +double: 1 +idouble: 1 +Test "y1 (1.0) == -0.78121282130028871655": +double: 1 +idouble: 1 +Test "y1 (1.5) == -0.41230862697391129595": +float: 1 +ifloat: 1 +Test "y1 (10.0) == 0.24901542420695388392": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +Test "y1 (2.0) == -0.10703243154093754689": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "y1 (8.0) == -0.15806046173124749426": +float: 2 +ifloat: 2 + +# yn +Test "yn (0, 0.1) == -1.5342386513503668441": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (0, 0.7) == -0.19066492933739506743": +double: 2 +idouble: 2 +Test "yn (0, 1.0) == 0.088256964215676957983": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (0, 1.5) == 0.38244892379775884396": +float: 1 +ifloat: 1 +Test "yn (0, 10.0) == 0.055671167283599391424": +float: 1 +ifloat: 1 +Test "yn (0, 8.0) == 0.22352148938756622053": +float: 1 +ifloat: 1 +Test "yn (1, 0.1) == -6.4589510947020269877": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (1, 0.7) == -1.1032498719076333697": +double: 1 +idouble: 1 +Test "yn (1, 1.0) == -0.78121282130028871655": +double: 1 +idouble: 1 +Test "yn (1, 1.5) == -0.41230862697391129595": +float: 1 +ifloat: 1 +Test "yn (1, 10.0) == 0.24901542420695388392": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +Test "yn (1, 2.0) == -0.10703243154093754689": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (1, 8.0) == -0.15806046173124749426": +float: 2 +ifloat: 2 +Test "yn (10, 0.1) == -0.11831335132045197885e19": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "yn (10, 0.7) == -0.42447194260703866924e10": +double: 6 +float: 3 +idouble: 6 +ifloat: 3 +Test "yn (10, 1.0) == -0.12161801427868918929e9": +float: 1 +ifloat: 1 +Test "yn (10, 10.0) == -0.35981415218340272205": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (10, 2.0) == -129184.54220803928264": +float: 1 +ifloat: 1 +Test "yn (3, 0.1) == -5099.3323786129048894": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (3, 0.7) == -15.819479052819633505": +double: 2 +idouble: 2 +Test "yn (3, 10.0) == -0.25136265718383732978": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# Maximal error of functions: +Function: "acos": +ildouble: 1149 +ldouble: 1149 + +Function: "asin": +double: 1 +ildouble: 1147 +ldouble: 1147 + +Function: "asinh": +ildouble: 656 +ldouble: 656 + +Function: "atan": +ildouble: 549 +ldouble: 549 + +Function: "atan2": +ildouble: 549 +ldouble: 549 + +Function: "atanh": +double: 1 +idouble: 1 +ildouble: 1605 +ldouble: 1605 + +Function: "cabs": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 560 +ldouble: 560 + +Function: Real part of "cacos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 151 +ldouble: 151 + +Function: Imaginary part of "cacos": +float: 2 +ifloat: 2 +ildouble: 329 +ldouble: 329 + +Function: Real part of "cacosh": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 +ildouble: 328 +ldouble: 328 + +Function: Imaginary part of "cacosh": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 +ildouble: 151 +ldouble: 151 + +Function: Real part of "casin": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 +ildouble: 603 +ldouble: 603 + +Function: Imaginary part of "casin": +float: 2 +ifloat: 2 +ildouble: 329 +ldouble: 329 + +Function: Real part of "casinh": +double: 5 +float: 1 +idouble: 5 +ifloat: 1 +ildouble: 892 +ldouble: 892 + +Function: Imaginary part of "casinh": +double: 3 +float: 6 +idouble: 3 +ifloat: 6 +ildouble: 12 +ldouble: 12 + +Function: Real part of "catan": +ildouble: 251 +ldouble: 251 + +Function: Imaginary part of "catan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 474 +ldouble: 474 + +Function: Real part of "catanh": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 66 +ldouble: 66 + +Function: Imaginary part of "catanh": +ildouble: 447 +ldouble: 447 + +Function: "cbrt": +double: 1 +idouble: 1 +ildouble: 716 +ldouble: 716 + +Function: Real part of "ccos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 5 +ldouble: 5 + +Function: Imaginary part of "ccos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1901 +ldouble: 1901 + +Function: Real part of "ccosh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1467 +ldouble: 1467 + +Function: Imaginary part of "ccosh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1183 +ldouble: 1183 + +Function: Real part of "cexp": +float: 1 +ifloat: 1 +ildouble: 940 +ldouble: 940 + +Function: Imaginary part of "cexp": +ildouble: 1067 +ldouble: 1067 + +Function: Real part of "clog": + +Function: Imaginary part of "clog": +ildouble: 1 +ldouble: 1 + +Function: Real part of "clog10": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1402 +ldouble: 1402 + +Function: Imaginary part of "clog10": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 186 +ldouble: 186 + +Function: "cos": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 529 +ldouble: 529 + +Function: "cosh": +ildouble: 309 +ldouble: 309 + +Function: Real part of "cpow": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 + +Function: Imaginary part of "cpow": +double: 1.104 +float: 2.5333 +idouble: 1.104 +ifloat: 2.5333 +ildouble: 2 +ldouble: 2 + +Function: Real part of "csin": +ildouble: 966 +ldouble: 966 + +Function: Imaginary part of "csin": +ildouble: 168 +ldouble: 168 + +Function: Real part of "csinh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 413 +ldouble: 413 + +Function: Imaginary part of "csinh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 477 +ldouble: 477 + +Function: Real part of "csqrt": +double: 1 +idouble: 1 +ildouble: 237 +ldouble: 237 + +Function: Imaginary part of "csqrt": +ildouble: 128 +ldouble: 128 + +Function: Real part of "ctan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 690 +ldouble: 690 + +Function: Imaginary part of "ctan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 367 +ldouble: 367 + +Function: Real part of "ctanh": +float: 1 +ifloat: 1 +ildouble: 286 +ldouble: 286 + +Function: Imaginary part of "ctanh": +double: 1 +idouble: 1 +ildouble: 3074 +ldouble: 3074 + +Function: "erfc": +double: 24 +float: 12 +idouble: 24 +ifloat: 12 + +Function: "exp": +ildouble: 412 +ldouble: 412 + +Function: "exp10": +double: 1 +idouble: 1 +ildouble: 1182 +ldouble: 1182 + +Function: "exp2": +ildouble: 462 +ldouble: 462 + +Function: "expm1": +ildouble: 825 +ldouble: 825 + +Function: "fmod": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4096 +ldouble: 4096 + +Function: "hypot": +double: 1 +float: 1 +ildouble: 560 +ldouble: 560 + +Function: "j0": +float: 1 +ifloat: 1 + +Function: "j1": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "jn": +double: 4 +float: 2 +idouble: 4 +ifloat: 2 + +Function: "lgamma": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: "log": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2341 +ldouble: 2341 + +Function: "log10": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2033 +ldouble: 2033 + +Function: "log1p": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 585 +ldouble: 585 + +Function: "log2": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1688 +ldouble: 1688 + +Function: "pow": +ildouble: 725 +ldouble: 725 + +Function: "sin": +ildouble: 627 +ldouble: 627 + +Function: "sincos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 627 +ldouble: 627 + +Function: "sinh": +float: 1 +ifloat: 1 +ildouble: 1028 +ldouble: 1029 + +Function: "sqrt": +ildouble: 489 +ldouble: 489 + +Function: "tan": +double: 0.5 +idouble: 0.5 +ildouble: 1401 +ldouble: 1401 + +Function: "tanh": +ildouble: 521 +ldouble: 521 + +Function: "tgamma": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "y0": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: "y1": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "yn": +double: 6 +float: 3 +idouble: 6 +ifloat: 3 + +# end of automatic generation diff --git a/sysdeps/i386/fpu/s_log1p.S b/sysdeps/i386/fpu/s_log1p.S index 10e8a36369..d3bc3d7251 100644 --- a/sysdeps/i386/fpu/s_log1p.S +++ b/sysdeps/i386/fpu/s_log1p.S @@ -36,8 +36,12 @@ ENTRY(__log1p) addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx #endif + fxam + fnstsw fld %st - fabs + sahf + jc 3f // in case x is NaN or ħInf +4: fabs #ifdef PIC fcompl limit@GOTOFF(%edx) #else @@ -58,5 +62,10 @@ ENTRY(__log1p) 2: fyl2xp1 ret +3: jp 4b // in case x is ħInf + fstp %st(1) + fstp %st(1) + ret + END (__log1p) weak_alias (__log1p, log1p) diff --git a/sysdeps/i386/fpu/s_log1pf.S b/sysdeps/i386/fpu/s_log1pf.S index df9fdcbcfc..d5283fcfee 100644 --- a/sysdeps/i386/fpu/s_log1pf.S +++ b/sysdeps/i386/fpu/s_log1pf.S @@ -36,8 +36,12 @@ ENTRY(__log1pf) addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx #endif + fxam + fnstsw fld %st - fabs + sahf + jc 3f // in case x is NaN or ħInf +4: fabs #ifdef PIC fcomps limit@GOTOFF(%edx) #else @@ -58,5 +62,10 @@ ENTRY(__log1pf) 2: fyl2xp1 ret +3: jp 4b // in case x is ħInf + fstp %st(1) + fstp %st(1) + ret + END (__log1pf) weak_alias (__log1pf, log1pf) diff --git a/sysdeps/i386/fpu/s_log1pl.S b/sysdeps/i386/fpu/s_log1pl.S index 05a17b2831..26c407b606 100644 --- a/sysdeps/i386/fpu/s_log1pl.S +++ b/sysdeps/i386/fpu/s_log1pl.S @@ -41,7 +41,12 @@ ENTRY(__log1pl) addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx #endif + fxam + fnstsw fld %st + sahf + jc 3f // in case x is NaN or ħInf +4: fabs #ifdef PIC fldt limit@GOTOFF(%edx) @@ -64,5 +69,10 @@ ENTRY(__log1pl) 2: fyl2xp1 ret +3: jp 4b // in case x is ħInf + fstp %st(1) + fstp %st(1) + ret + END (__log1pl) weak_alias (__log1pl, log1pl) diff --git a/sysdeps/i386/fpu/s_log2.S b/sysdeps/i386/fpu/s_log2.S index 4632c96f67..5ba40761e9 100644 --- a/sysdeps/i386/fpu/s_log2.S +++ b/sysdeps/i386/fpu/s_log2.S @@ -40,8 +40,12 @@ ENTRY(__log2) #endif fldl MO(one) fldl 4(%esp) // x : 1 + fxam + fnstsw fld %st // x : x : 1 - fsub %st(2), %st // x-1 : x : 1 + sahf + jc 3f // in case x is NaN or ħInf +4: fsub %st(2), %st // x-1 : x : 1 fld %st // x-1 : x-1 : x : 1 fabs // |x-1| : x-1 : x : 1 fcompl MO(limit) // x-1 : x : 1 @@ -55,5 +59,10 @@ ENTRY(__log2) 2: fstp %st(0) // x : 1 fyl2x // log(x) ret + +3: jp 4b // in case x is ħInf + fstp %st(1) + fstp %st(1) + ret END (__log2) weak_alias (__log2, log2) diff --git a/sysdeps/i386/fpu/s_log2f.S b/sysdeps/i386/fpu/s_log2f.S index bfdd0ef88e..111dc9c1d9 100644 --- a/sysdeps/i386/fpu/s_log2f.S +++ b/sysdeps/i386/fpu/s_log2f.S @@ -40,8 +40,12 @@ ENTRY(__log2f) #endif fldl MO(one) flds 4(%esp) // x : 1 + fxam + fnstsw fld %st // x : x : 1 - fsub %st(2), %st // x-1 : x : 1 + sahf + jc 3f // in case x is NaN or ħInf +4: fsub %st(2), %st // x-1 : x : 1 fld %st // x-1 : x-1 : x : 1 fabs // |x-1| : x-1 : x : 1 fcompl MO(limit) // x-1 : x : 1 @@ -55,5 +59,10 @@ ENTRY(__log2f) 2: fstp %st(0) // x : 1 fyl2x // log(x) ret + +3: jp 4b // in case x is ħInf + fstp %st(1) + fstp %st(1) + ret END (__log2f) weak_alias (__log2f, log2f) diff --git a/sysdeps/i386/fpu/s_log2l.S b/sysdeps/i386/fpu/s_log2l.S index 184981c4bb..7b645d57ab 100644 --- a/sysdeps/i386/fpu/s_log2l.S +++ b/sysdeps/i386/fpu/s_log2l.S @@ -40,8 +40,12 @@ ENTRY(__log2l) #endif fldl MO(one) fldt 4(%esp) // x : 1 + fxam + fnstsw fld %st // x : x : 1 - fsub %st(2), %st // x-1 : x : 1 + sahf + jc 3f // in case x is NaN or ħInf +4: fsub %st(2), %st // x-1 : x : 1 fld %st // x-1 : x-1 : x : 1 fabs // |x-1| : x-1 : x : 1 fcompl MO(limit) // x-1 : x : 1 @@ -55,5 +59,10 @@ ENTRY(__log2l) 2: fstp %st(0) // x : 1 fyl2x // log(x) ret + +3: jp 4b // in case x is ħInf + fstp %st(1) + fstp %st(1) + ret END (__log2l) weak_alias (__log2l, log2l) -- cgit 1.4.1