1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00

Fix ccos, csin, ccosh, csinh overflows (bug 14123).

This commit is contained in:
Joseph Myers
2012-05-19 15:35:29 +00:00
parent f66f0ce833
commit e0b16cc25c
14 changed files with 801 additions and 64 deletions

View File

@ -1,3 +1,24 @@
2012-05-19 Joseph Myers <joseph@codesourcery.com>
[BZ #14123]
* math/s_ccosh.c: Include <float.h>
(__ccosh): Avoid internal overflow calculating sinh and cosh
values before multiplying by sin and cos values.
* math/s_ccoshf.c: Likewise.
* math/s_ccoshl.c: Likewise.
* math/s_csin.c: Likewise.
* math/s_csinf.c: Likewise.
* math/s_csinl.c: Likewise.
* math/s_csinh.c: Likewise.
* math/s_csinhf.c: Likewise.
* math/s_csinhl.c: Likewise.
* math/libm-test.inc (ccos_test): Add more tests.
(ccosh_test): Likewise.
(csin_test): Likewise.
(csinh_test): Likewise.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2012-05-19 H.J. Lu <hongjiu.lu@intel.com> 2012-05-19 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/unix/sysv/linux/wordsize-64/preadv.c: New file. * sysdeps/unix/sysv/linux/wordsize-64/preadv.c: New file.

2
NEWS
View File

@ -27,7 +27,7 @@ Version 2.16
13919, 13920, 13921, 13922, 13923, 13924, 13926, 13927, 13928, 13938, 13919, 13920, 13921, 13922, 13923, 13924, 13926, 13927, 13928, 13938,
13941, 13942, 13954, 13955, 13956, 13963, 13967, 13970, 13973, 13979, 13941, 13942, 13954, 13955, 13956, 13963, 13967, 13970, 13973, 13979,
13983, 13986, 14012, 14027, 14033, 14034, 14040, 14043, 14044, 14049, 13983, 13986, 14012, 14027, 14033, 14034, 14040, 14043, 14044, 14049,
14053, 14055, 14059, 14064, 14080, 14083, 14103, 14104, 14109 14053, 14055, 14059, 14064, 14080, 14083, 14103, 14104, 14109, 14123
* ISO C11 support: * ISO C11 support:

View File

@ -1955,6 +1955,37 @@ ccos_test (void)
TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L); TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L); TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
TEST_c_c (ccos, 0.75, 89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
TEST_c_c (ccos, 0.75, -89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
TEST_c_c (ccos, -0.75, 89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
TEST_c_c (ccos, -0.75, -89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
#ifndef TEST_FLOAT
TEST_c_c (ccos, 0.75, 710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
TEST_c_c (ccos, 0.75, -710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
TEST_c_c (ccos, -0.75, 710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
TEST_c_c (ccos, -0.75, -710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (ccos, 0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
TEST_c_c (ccos, 0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
TEST_c_c (ccos, -0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
TEST_c_c (ccos, -0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
#endif
#ifdef TEST_FLOAT
TEST_c_c (ccos, 0x1p-149, 180, plus_infty, -1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
#endif
#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
TEST_c_c (ccos, 0x1p-1074, 1440, plus_infty, -5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
#endif
END (ccos, complex); END (ccos, complex);
} }
@ -2024,6 +2055,37 @@ ccosh_test (void)
TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L); TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
TEST_c_c (ccosh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
TEST_c_c (ccosh, -89.5, 0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
TEST_c_c (ccosh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
TEST_c_c (ccosh, -89.5, -0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
#ifndef TEST_FLOAT
TEST_c_c (ccosh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
TEST_c_c (ccosh, -710.5, 0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
TEST_c_c (ccosh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
TEST_c_c (ccosh, -710.5, -0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (ccosh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
TEST_c_c (ccosh, -11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
TEST_c_c (ccosh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
TEST_c_c (ccosh, -11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
#endif
#ifdef TEST_FLOAT
TEST_c_c (ccosh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
#endif
#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
TEST_c_c (ccosh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
#endif
END (ccosh, complex); END (ccosh, complex);
} }
@ -2908,6 +2970,37 @@ csin_test (void)
TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L); TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L); TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
TEST_c_c (csin, 0.75, 89.5, 2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
TEST_c_c (csin, 0.75, -89.5, 2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
TEST_c_c (csin, -0.75, 89.5, -2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
TEST_c_c (csin, -0.75, -89.5, -2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
#ifndef TEST_FLOAT
TEST_c_c (csin, 0.75, 710.5, 1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
TEST_c_c (csin, 0.75, -710.5, 1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
TEST_c_c (csin, -0.75, 710.5, -1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
TEST_c_c (csin, -0.75, -710.5, -1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (csin, 0.75, 11357.25, 8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
TEST_c_c (csin, 0.75, -11357.25, 8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
TEST_c_c (csin, -0.75, 11357.25, -8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
TEST_c_c (csin, -0.75, -11357.25, -8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
#endif
#ifdef TEST_FLOAT
TEST_c_c (csin, 0x1p-149, 180, 1.043535896672617552965983803453927655332e33L, plus_infty, OVERFLOW_EXCEPTION);
#endif
#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
TEST_c_c (csin, 0x1p-1074, 1440, 5.981479269486130556466515778180916082415e301L, plus_infty, OVERFLOW_EXCEPTION);
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
#endif
END (csin, complex); END (csin, complex);
} }
@ -2976,6 +3069,37 @@ csinh_test (void)
TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L); TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L); TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
TEST_c_c (csinh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
TEST_c_c (csinh, -89.5, 0.75, -2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
TEST_c_c (csinh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
TEST_c_c (csinh, -89.5, -0.75, -2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
#ifndef TEST_FLOAT
TEST_c_c (csinh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
TEST_c_c (csinh, -710.5, 0.75, -1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
TEST_c_c (csinh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
TEST_c_c (csinh, -710.5, -0.75, -1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (csinh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
TEST_c_c (csinh, -11357.25, 0.75, -9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
TEST_c_c (csinh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
TEST_c_c (csinh, -11357.25, -0.75, -9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
#endif
#ifdef TEST_FLOAT
TEST_c_c (csinh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
#endif
#if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
TEST_c_c (csinh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
#endif
END (csinh, complex); END (csinh, complex);
} }

View File

@ -1,5 +1,5 @@
/* Complex cosine hyperbole function for double. /* Complex cosine hyperbole function for double.
Copyright (C) 1997, 2011 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -20,9 +20,8 @@
#include <complex.h> #include <complex.h>
#include <fenv.h> #include <fenv.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <float.h>
__complex__ double __complex__ double
__ccosh (__complex__ double x) __ccosh (__complex__ double x)
@ -37,14 +36,44 @@ __ccosh (__complex__ double x)
if (__builtin_expect (icls >= FP_ZERO, 1)) if (__builtin_expect (icls >= FP_ZERO, 1))
{ {
/* Imaginary part is finite. */ /* Imaginary part is finite. */
double sinh_val = __ieee754_sinh (__real__ x); const int t = (int) ((DBL_MAX_EXP - 1) * M_LN2);
double cosh_val = __ieee754_cosh (__real__ x);
double sinix, cosix; double sinix, cosix;
__sincos (__imag__ x, &sinix, &cosix); __sincos (__imag__ x, &sinix, &cosix);
__real__ retval = cosh_val * cosix; if (fabs (__real__ x) > t)
__imag__ retval = sinh_val * sinix; {
double exp_t = __ieee754_exp (t);
double rx = fabs (__real__ x);
if (signbit (__real__ x))
sinix = -sinix;
rx -= t;
sinix *= exp_t / 2.0;
cosix *= exp_t / 2.0;
if (rx > t)
{
rx -= t;
sinix *= exp_t;
cosix *= exp_t;
}
if (rx > t)
{
/* Overflow (original real part of x > 3t). */
__real__ retval = DBL_MAX * cosix;
__imag__ retval = DBL_MAX * sinix;
}
else
{
double exp_val = __ieee754_exp (rx);
__real__ retval = exp_val * cosix;
__imag__ retval = exp_val * sinix;
}
}
else
{
__real__ retval = __ieee754_cosh (__real__ x) * cosix;
__imag__ retval = __ieee754_sinh (__real__ x) * sinix;
}
} }
else else
{ {

View File

@ -1,5 +1,5 @@
/* Complex cosine hyperbole function for float. /* Complex cosine hyperbole function for float.
Copyright (C) 1997, 2011 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -20,9 +20,8 @@
#include <complex.h> #include <complex.h>
#include <fenv.h> #include <fenv.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <float.h>
__complex__ float __complex__ float
__ccoshf (__complex__ float x) __ccoshf (__complex__ float x)
@ -37,14 +36,44 @@ __ccoshf (__complex__ float x)
if (__builtin_expect (icls >= FP_ZERO, 1)) if (__builtin_expect (icls >= FP_ZERO, 1))
{ {
/* Imaginary part is finite. */ /* Imaginary part is finite. */
float sinh_val = __ieee754_sinhf (__real__ x); const int t = (int) ((FLT_MAX_EXP - 1) * M_LN2);
float cosh_val = __ieee754_coshf (__real__ x);
float sinix, cosix; float sinix, cosix;
__sincosf (__imag__ x, &sinix, &cosix); __sincosf (__imag__ x, &sinix, &cosix);
__real__ retval = cosh_val * cosix; if (fabsf (__real__ x) > t)
__imag__ retval = sinh_val * sinix; {
float exp_t = __ieee754_expf (t);
float rx = fabsf (__real__ x);
if (signbit (__real__ x))
sinix = -sinix;
rx -= t;
sinix *= exp_t / 2.0f;
cosix *= exp_t / 2.0f;
if (rx > t)
{
rx -= t;
sinix *= exp_t;
cosix *= exp_t;
}
if (rx > t)
{
/* Overflow (original real part of x > 3t). */
__real__ retval = FLT_MAX * cosix;
__imag__ retval = FLT_MAX * sinix;
}
else
{
float exp_val = __ieee754_expf (rx);
__real__ retval = exp_val * cosix;
__imag__ retval = exp_val * sinix;
}
}
else
{
__real__ retval = __ieee754_coshf (__real__ x) * cosix;
__imag__ retval = __ieee754_sinhf (__real__ x) * sinix;
}
} }
else else
{ {

View File

@ -1,5 +1,5 @@
/* Complex cosine hyperbole function for long double. /* Complex cosine hyperbole function for long double.
Copyright (C) 1997, 2011 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -20,9 +20,8 @@
#include <complex.h> #include <complex.h>
#include <fenv.h> #include <fenv.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <float.h>
__complex__ long double __complex__ long double
__ccoshl (__complex__ long double x) __ccoshl (__complex__ long double x)
@ -37,14 +36,44 @@ __ccoshl (__complex__ long double x)
if (__builtin_expect (icls >= FP_ZERO, 1)) if (__builtin_expect (icls >= FP_ZERO, 1))
{ {
/* Imaginary part is finite. */ /* Imaginary part is finite. */
long double sinh_val = __ieee754_sinhl (__real__ x); const int t = (int) ((LDBL_MAX_EXP - 1) * M_LN2l);
long double cosh_val = __ieee754_coshl (__real__ x);
long double sinix, cosix; long double sinix, cosix;
__sincosl (__imag__ x, &sinix, &cosix); __sincosl (__imag__ x, &sinix, &cosix);
__real__ retval = cosh_val * cosix; if (fabsl (__real__ x) > t)
__imag__ retval = sinh_val * sinix; {
long double exp_t = __ieee754_expl (t);
long double rx = fabsl (__real__ x);
if (signbit (__real__ x))
sinix = -sinix;
rx -= t;
sinix *= exp_t / 2.0L;
cosix *= exp_t / 2.0L;
if (rx > t)
{
rx -= t;
sinix *= exp_t;
cosix *= exp_t;
}
if (rx > t)
{
/* Overflow (original real part of x > 3t). */
__real__ retval = LDBL_MAX * cosix;
__imag__ retval = LDBL_MAX * sinix;
}
else
{
long double exp_val = __ieee754_expl (rx);
__real__ retval = exp_val * cosix;
__imag__ retval = exp_val * sinix;
}
}
else
{
__real__ retval = __ieee754_coshl (__real__ x) * cosix;
__imag__ retval = __ieee754_sinhl (__real__ x) * sinix;
}
} }
else else
{ {

View File

@ -1,5 +1,5 @@
/* Complex sine function for double. /* Complex sine function for double.
Copyright (C) 1997, 2011 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -20,9 +20,8 @@
#include <complex.h> #include <complex.h>
#include <fenv.h> #include <fenv.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <float.h>
__complex__ double __complex__ double
__csin (__complex__ double x) __csin (__complex__ double x)
@ -40,14 +39,44 @@ __csin (__complex__ double x)
if (__builtin_expect (rcls >= FP_ZERO, 1)) if (__builtin_expect (rcls >= FP_ZERO, 1))
{ {
/* Real part is finite. */ /* Real part is finite. */
double sinh_val = __ieee754_sinh (__imag__ x); const int t = (int) ((DBL_MAX_EXP - 1) * M_LN2);
double cosh_val = __ieee754_cosh (__imag__ x);
double sinix, cosix; double sinix, cosix;
__sincos (__real__ x, &sinix, &cosix); __sincos (__real__ x, &sinix, &cosix);
__real__ retval = cosh_val * sinix; if (fabs (__imag__ x) > t)
__imag__ retval = sinh_val * cosix; {
double exp_t = __ieee754_exp (t);
double ix = fabs (__imag__ x);
if (signbit (__imag__ x))
cosix = -cosix;
ix -= t;
sinix *= exp_t / 2.0;
cosix *= exp_t / 2.0;
if (ix > t)
{
ix -= t;
sinix *= exp_t;
cosix *= exp_t;
}
if (ix > t)
{
/* Overflow (original imaginary part of x > 3t). */
__real__ retval = DBL_MAX * sinix;
__imag__ retval = DBL_MAX * cosix;
}
else
{
double exp_val = __ieee754_exp (ix);
__real__ retval = exp_val * sinix;
__imag__ retval = exp_val * cosix;
}
}
else
{
__real__ retval = __ieee754_cosh (__imag__ x) * sinix;
__imag__ retval = __ieee754_sinh (__imag__ x) * cosix;
}
if (negate) if (negate)
__real__ retval = -__real__ retval; __real__ retval = -__real__ retval;

View File

@ -1,5 +1,5 @@
/* Complex sine function for float. /* Complex sine function for float.
Copyright (C) 1997, 2011 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -20,9 +20,8 @@
#include <complex.h> #include <complex.h>
#include <fenv.h> #include <fenv.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <float.h>
__complex__ float __complex__ float
__csinf (__complex__ float x) __csinf (__complex__ float x)
@ -40,14 +39,44 @@ __csinf (__complex__ float x)
if (__builtin_expect (rcls >= FP_ZERO, 1)) if (__builtin_expect (rcls >= FP_ZERO, 1))
{ {
/* Real part is finite. */ /* Real part is finite. */
float sinh_val = __ieee754_sinhf (__imag__ x); const int t = (int) ((FLT_MAX_EXP - 1) * M_LN2);
float cosh_val = __ieee754_coshf (__imag__ x);
float sinix, cosix; float sinix, cosix;
__sincosf (__real__ x, &sinix, &cosix); __sincosf (__real__ x, &sinix, &cosix);
__real__ retval = cosh_val * sinix; if (fabsf (__imag__ x) > t)
__imag__ retval = sinh_val * cosix; {
float exp_t = __ieee754_expf (t);
float ix = fabsf (__imag__ x);
if (signbit (__imag__ x))
cosix = -cosix;
ix -= t;
sinix *= exp_t / 2.0f;
cosix *= exp_t / 2.0f;
if (ix > t)
{
ix -= t;
sinix *= exp_t;
cosix *= exp_t;
}
if (ix > t)
{
/* Overflow (original imaginary part of x > 3t). */
__real__ retval = FLT_MAX * sinix;
__imag__ retval = FLT_MAX * cosix;
}
else
{
float exp_val = __ieee754_expf (ix);
__real__ retval = exp_val * sinix;
__imag__ retval = exp_val * cosix;
}
}
else
{
__real__ retval = __ieee754_coshf (__imag__ x) * sinix;
__imag__ retval = __ieee754_sinhf (__imag__ x) * cosix;
}
if (negate) if (negate)
__real__ retval = -__real__ retval; __real__ retval = -__real__ retval;

View File

@ -1,5 +1,5 @@
/* Complex sine hyperbole function for double. /* Complex sine hyperbole function for double.
Copyright (C) 1997, 2011 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -20,9 +20,8 @@
#include <complex.h> #include <complex.h>
#include <fenv.h> #include <fenv.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <float.h>
__complex__ double __complex__ double
__csinh (__complex__ double x) __csinh (__complex__ double x)
@ -40,14 +39,44 @@ __csinh (__complex__ double x)
if (__builtin_expect (icls >= FP_ZERO, 1)) if (__builtin_expect (icls >= FP_ZERO, 1))
{ {
/* Imaginary part is finite. */ /* Imaginary part is finite. */
double sinh_val = __ieee754_sinh (__real__ x); const int t = (int) ((DBL_MAX_EXP - 1) * M_LN2);
double cosh_val = __ieee754_cosh (__real__ x);
double sinix, cosix; double sinix, cosix;
__sincos (__imag__ x, &sinix, &cosix); __sincos (__imag__ x, &sinix, &cosix);
__real__ retval = sinh_val * cosix; if (fabs (__real__ x) > t)
__imag__ retval = cosh_val * sinix; {
double exp_t = __ieee754_exp (t);
double rx = fabs (__real__ x);
if (signbit (__real__ x))
cosix = -cosix;
rx -= t;
sinix *= exp_t / 2.0;
cosix *= exp_t / 2.0;
if (rx > t)
{
rx -= t;
sinix *= exp_t;
cosix *= exp_t;
}
if (rx > t)
{
/* Overflow (original real part of x > 3t). */
__real__ retval = DBL_MAX * cosix;
__imag__ retval = DBL_MAX * sinix;
}
else
{
double exp_val = __ieee754_exp (rx);
__real__ retval = exp_val * cosix;
__imag__ retval = exp_val * sinix;
}
}
else
{
__real__ retval = __ieee754_sinh (__real__ x) * cosix;
__imag__ retval = __ieee754_cosh (__real__ x) * sinix;
}
if (negate) if (negate)
__real__ retval = -__real__ retval; __real__ retval = -__real__ retval;

View File

@ -1,5 +1,5 @@
/* Complex sine hyperbole function for float. /* Complex sine hyperbole function for float.
Copyright (C) 1997, 2011 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -20,9 +20,8 @@
#include <complex.h> #include <complex.h>
#include <fenv.h> #include <fenv.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <float.h>
__complex__ float __complex__ float
__csinhf (__complex__ float x) __csinhf (__complex__ float x)
@ -40,14 +39,44 @@ __csinhf (__complex__ float x)
if (__builtin_expect (icls >= FP_ZERO, 1)) if (__builtin_expect (icls >= FP_ZERO, 1))
{ {
/* Imaginary part is finite. */ /* Imaginary part is finite. */
float sinh_val = __ieee754_sinhf (__real__ x); const int t = (int) ((FLT_MAX_EXP - 1) * M_LN2);
float cosh_val = __ieee754_coshf (__real__ x);
float sinix, cosix; float sinix, cosix;
__sincosf (__imag__ x, &sinix, &cosix); __sincosf (__imag__ x, &sinix, &cosix);
__real__ retval = sinh_val * cosix; if (fabsf (__real__ x) > t)
__imag__ retval = cosh_val * sinix; {
float exp_t = __ieee754_expf (t);
float rx = fabsf (__real__ x);
if (signbit (__real__ x))
cosix = -cosix;
rx -= t;
sinix *= exp_t / 2.0f;
cosix *= exp_t / 2.0f;
if (rx > t)
{
rx -= t;
sinix *= exp_t;
cosix *= exp_t;
}
if (rx > t)
{
/* Overflow (original real part of x > 3t). */
__real__ retval = FLT_MAX * cosix;
__imag__ retval = FLT_MAX * sinix;
}
else
{
float exp_val = __ieee754_expf (rx);
__real__ retval = exp_val * cosix;
__imag__ retval = exp_val * sinix;
}
}
else
{
__real__ retval = __ieee754_sinhf (__real__ x) * cosix;
__imag__ retval = __ieee754_coshf (__real__ x) * sinix;
}
if (negate) if (negate)
__real__ retval = -__real__ retval; __real__ retval = -__real__ retval;

View File

@ -1,5 +1,5 @@
/* Complex sine hyperbole function for long double. /* Complex sine hyperbole function for long double.
Copyright (C) 1997, 2011 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -20,9 +20,8 @@
#include <complex.h> #include <complex.h>
#include <fenv.h> #include <fenv.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <float.h>
__complex__ long double __complex__ long double
__csinhl (__complex__ long double x) __csinhl (__complex__ long double x)
@ -40,14 +39,44 @@ __csinhl (__complex__ long double x)
if (__builtin_expect (icls >= FP_ZERO, 1)) if (__builtin_expect (icls >= FP_ZERO, 1))
{ {
/* Imaginary part is finite. */ /* Imaginary part is finite. */
long double sinh_val = __ieee754_sinhl (__real__ x); const int t = (int) ((LDBL_MAX_EXP - 1) * M_LN2l);
long double cosh_val = __ieee754_coshl (__real__ x);
long double sinix, cosix; long double sinix, cosix;
__sincosl (__imag__ x, &sinix, &cosix); __sincosl (__imag__ x, &sinix, &cosix);
__real__ retval = sinh_val * cosix; if (fabsl (__real__ x) > t)
__imag__ retval = cosh_val * sinix; {
long double exp_t = __ieee754_expl (t);
long double rx = fabsl (__real__ x);
if (signbit (__real__ x))
cosix = -cosix;
rx -= t;
sinix *= exp_t / 2.0L;
cosix *= exp_t / 2.0L;
if (rx > t)
{
rx -= t;
sinix *= exp_t;
cosix *= exp_t;
}
if (rx > t)
{
/* Overflow (original real part of x > 3t). */
__real__ retval = LDBL_MAX * cosix;
__imag__ retval = LDBL_MAX * sinix;
}
else
{
long double exp_val = __ieee754_expl (rx);
__real__ retval = exp_val * cosix;
__imag__ retval = exp_val * sinix;
}
}
else
{
__real__ retval = __ieee754_sinhl (__real__ x) * cosix;
__imag__ retval = __ieee754_coshl (__real__ x) * sinix;
}
if (negate) if (negate)
__real__ retval = -__real__ retval; __real__ retval = -__real__ retval;

View File

@ -1,5 +1,5 @@
/* Complex sine function for long double. /* Complex sine function for long double.
Copyright (C) 1997, 2011 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -20,9 +20,8 @@
#include <complex.h> #include <complex.h>
#include <fenv.h> #include <fenv.h>
#include <math.h> #include <math.h>
#include <math_private.h> #include <math_private.h>
#include <float.h>
__complex__ long double __complex__ long double
__csinl (__complex__ long double x) __csinl (__complex__ long double x)
@ -40,14 +39,44 @@ __csinl (__complex__ long double x)
if (__builtin_expect (rcls >= FP_ZERO, 1)) if (__builtin_expect (rcls >= FP_ZERO, 1))
{ {
/* Real part is finite. */ /* Real part is finite. */
long double sinh_val = __ieee754_sinhl (__imag__ x); const int t = (int) ((LDBL_MAX_EXP - 1) * M_LN2l);
long double cosh_val = __ieee754_coshl (__imag__ x);
long double sinix, cosix; long double sinix, cosix;
__sincosl (__real__ x, &sinix, &cosix); __sincosl (__real__ x, &sinix, &cosix);
__real__ retval = cosh_val * sinix; if (fabsl (__imag__ x) > t)
__imag__ retval = sinh_val * cosix; {
long double exp_t = __ieee754_expl (t);
long double ix = fabsl (__imag__ x);
if (signbit (__imag__ x))
cosix = -cosix;
ix -= t;
sinix *= exp_t / 2.0L;
cosix *= exp_t / 2.0L;
if (ix > t)
{
ix -= t;
sinix *= exp_t;
cosix *= exp_t;
}
if (ix > t)
{
/* Overflow (original imaginary part of x > 3t). */
__real__ retval = LDBL_MAX * sinix;
__imag__ retval = LDBL_MAX * cosix;
}
else
{
long double exp_val = __ieee754_expl (ix);
__real__ retval = exp_val * sinix;
__imag__ retval = exp_val * cosix;
}
}
else
{
__real__ retval = __ieee754_coshl (__imag__ x) * sinix;
__imag__ retval = __ieee754_sinhl (__imag__ x) * cosix;
}
if (negate) if (negate)
__real__ retval = -__real__ retval; __real__ retval = -__real__ retval;

View File

@ -576,6 +576,33 @@ ildouble: 1
ldouble: 1 ldouble: 1
# ccos # ccos
Test "Real part of: ccos (-0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccos (-0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: ccos (-0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccos (-0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
float: 1 float: 1
ifloat: 1 ifloat: 1
@ -583,12 +610,41 @@ ildouble: 1
ldouble: 1 ldouble: 1
Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
double: 1 double: 1
float: 1
idouble: 1 idouble: 1
ifloat: 1
ildouble: 1 ildouble: 1
ldouble: 1 ldouble: 1
Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
ildouble: 1 ildouble: 1
ldouble: 1 ldouble: 1
Test "Real part of: ccos (0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccos (0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: ccos (0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccos (0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccos (0x1p-1074 + 1440 i) == inf - 5.981479269486130556466515778180916082415e301 i plus overflow exception":
double: 1
idouble: 1
# ccosh # ccosh
Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
@ -598,6 +654,30 @@ idouble: 1
ifloat: 1 ifloat: 1
ildouble: 1 ildouble: 1
ldouble: 1 ldouble: 1
Test "Real part of: ccosh (-710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccosh (-710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: ccosh (-710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccosh (-710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
double: 1 double: 1
float: 1 float: 1
@ -608,6 +688,33 @@ double: 1
float: 1 float: 1
idouble: 1 idouble: 1
ifloat: 1 ifloat: 1
Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i plus overflow exception":
double: 1
idouble: 1
Test "Real part of: ccosh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccosh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: ccosh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccosh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
# cexp # cexp
Test "Real part of: cexp (-10000 + 0x1p16383 i) == 1.045876464564882298442774542991176546722e-4343 + 4.421154026488516836023811173959413420548e-4344 i": Test "Real part of: cexp (-10000 + 0x1p16383 i) == 1.045876464564882298442774542991176546722e-4343 + 4.421154026488516836023811173959413420548e-4344 i":
@ -1130,6 +1237,30 @@ ildouble: 1
ldouble: 1 ldouble: 1
# csin # csin
Test "Real part of: csin (-0.75 + 710.5 i) == -1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csin (-0.75 + 710.5 i) == -1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Real part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Real part of: csin (-0.75 - 710.5 i) == -1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csin (-0.75 - 710.5 i) == -1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Real part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i": Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
float: 1 float: 1
ifloat: 1 ifloat: 1
@ -1141,6 +1272,33 @@ ldouble: 1
Test "Imaginary part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i": Test "Imaginary part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
float: 1 float: 1
ifloat: 1 ifloat: 1
Test "Real part of: csin (0.75 + 710.5 i) == 1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csin (0.75 + 710.5 i) == 1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Real part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Real part of: csin (0.75 - 710.5 i) == 1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csin (0.75 - 710.5 i) == 1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Real part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Real part of: csin (0x1p-1074 + 1440 i) == 5.981479269486130556466515778180916082415e301 + inf i plus overflow exception":
double: 1
idouble: 1
# csinh # csinh
Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
@ -1153,6 +1311,30 @@ idouble: 1
ifloat: 1 ifloat: 1
ildouble: 2 ildouble: 2
ldouble: 2 ldouble: 2
Test "Real part of: csinh (-710.5 + 0.75 i) == -1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csinh (-710.5 + 0.75 i) == -1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: csinh (-710.5 - 0.75 i) == -1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csinh (-710.5 - 0.75 i) == -1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
double: 1 double: 1
float: 1 float: 1
@ -1163,6 +1345,33 @@ ldouble: 1
Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
float: 1 float: 1
ifloat: 1 ifloat: 1
Test "Imaginary part of: csinh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i plus overflow exception":
double: 1
idouble: 1
Test "Real part of: csinh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csinh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: csinh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csinh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Real part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
# csqrt # csqrt
Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i": Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i":
@ -2474,12 +2683,16 @@ ldouble: 1
Function: Real part of "ccos": Function: Real part of "ccos":
double: 1 double: 1
float: 1
idouble: 1 idouble: 1
ifloat: 1
ildouble: 1 ildouble: 1
ldouble: 1 ldouble: 1
Function: Imaginary part of "ccos": Function: Imaginary part of "ccos":
double: 1
float: 1 float: 1
idouble: 1
ifloat: 1 ifloat: 1
ildouble: 1 ildouble: 1
ldouble: 1 ldouble: 1
@ -2616,13 +2829,17 @@ ildouble: 4
ldouble: 4 ldouble: 4
Function: Real part of "csin": Function: Real part of "csin":
double: 1
float: 1 float: 1
idouble: 1
ifloat: 1 ifloat: 1
ildouble: 1 ildouble: 1
ldouble: 1 ldouble: 1
Function: Imaginary part of "csin": Function: Imaginary part of "csin":
double: 1
float: 1 float: 1
idouble: 1
ifloat: 1 ifloat: 1
Function: Real part of "csinh": Function: Real part of "csinh":

View File

@ -576,6 +576,18 @@ ildouble: 1
ldouble: 1 ldouble: 1
# ccos # ccos
Test "Imaginary part of: ccos (-0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccos (-0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
double: 1 double: 1
idouble: 1 idouble: 1
@ -596,6 +608,21 @@ float: 1
ifloat: 1 ifloat: 1
ildouble: 1 ildouble: 1
ldouble: 1 ldouble: 1
Test "Imaginary part of: ccos (0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccos (0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccos (0x1p-1074 + 1440 i) == inf - 5.981479269486130556466515778180916082415e301 i plus overflow exception":
double: 1
idouble: 1
# ccosh # ccosh
Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
@ -608,6 +635,18 @@ idouble: 1
ifloat: 1 ifloat: 1
ildouble: 1 ildouble: 1
ldouble: 1 ldouble: 1
Test "Imaginary part of: ccosh (-710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccosh (-710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
double: 1 double: 1
float: 1 float: 1
@ -616,6 +655,21 @@ ifloat: 1
Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
float: 1 float: 1
ifloat: 1 ifloat: 1
Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i plus overflow exception":
double: 1
idouble: 1
Test "Imaginary part of: ccosh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccosh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
# cexp # cexp
Test "Real part of: cexp (-10000 + 0x1p16383 i) == 1.045876464564882298442774542991176546722e-4343 + 4.421154026488516836023811173959413420548e-4344 i": Test "Real part of: cexp (-10000 + 0x1p16383 i) == 1.045876464564882298442774542991176546722e-4343 + 4.421154026488516836023811173959413420548e-4344 i":
@ -1085,6 +1139,18 @@ ildouble: 1
ldouble: 1 ldouble: 1
# csin # csin
Test "Real part of: csin (-0.75 + 710.5 i) == -1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Real part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Real part of: csin (-0.75 - 710.5 i) == -1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Real part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i": Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
double: 1 double: 1
idouble: 1 idouble: 1
@ -1094,6 +1160,21 @@ ldouble: 1
Test "Imaginary part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i": Test "Imaginary part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
float: 1 float: 1
ifloat: 1 ifloat: 1
Test "Real part of: csin (0.75 + 710.5 i) == 1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Real part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Real part of: csin (0.75 - 710.5 i) == 1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
double: 1
idouble: 1
Test "Real part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
float: 1
ifloat: 1
Test "Real part of: csin (0x1p-1074 + 1440 i) == 5.981479269486130556466515778180916082415e301 + inf i plus overflow exception":
double: 1
idouble: 1
# csinh # csinh
Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
@ -1104,6 +1185,18 @@ double: 1
idouble: 1 idouble: 1
ildouble: 2 ildouble: 2
ldouble: 2 ldouble: 2
Test "Imaginary part of: csinh (-710.5 + 0.75 i) == -1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csinh (-710.5 - 0.75 i) == -1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
float: 1 float: 1
ifloat: 1 ifloat: 1
@ -1112,6 +1205,21 @@ ldouble: 1
Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
float: 1 float: 1
ifloat: 1 ifloat: 1
Test "Imaginary part of: csinh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i plus overflow exception":
double: 1
idouble: 1
Test "Imaginary part of: csinh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csinh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
double: 1
idouble: 1
Test "Imaginary part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
Test "Imaginary part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
float: 1
ifloat: 1
# csqrt # csqrt
Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i": Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
@ -2368,7 +2476,9 @@ ildouble: 1
ldouble: 1 ldouble: 1
Function: Imaginary part of "ccos": Function: Imaginary part of "ccos":
double: 1
float: 1 float: 1
idouble: 1
ifloat: 1 ifloat: 1
ildouble: 1 ildouble: 1
ldouble: 1 ldouble: 1
@ -2500,6 +2610,10 @@ ildouble: 4
ldouble: 4 ldouble: 4
Function: Real part of "csin": Function: Real part of "csin":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1 ildouble: 1
ldouble: 1 ldouble: 1