コード例 #1
0
ファイル: test-ctrig.c プロジェクト: kusumi/DragonFlyBSD
/* Tests for 0 */
void
test_zero(void)
{
	long double complex zero = cpackl(0.0, 0.0);

	/* csinh(0) = ctanh(0) = 0; ccosh(0) = 1 (no exceptions raised) */
	testall_odd(csinh, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);
	testall_odd(csin, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);
	testall_even(ccosh, zero, 1.0, ALL_STD_EXCEPT, 0, CS_BOTH);
	testall_even(ccos, zero, cpackl(1.0, -0.0), ALL_STD_EXCEPT, 0, CS_BOTH);
	testall_odd(ctanh, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);
	testall_odd(ctan, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);
}
コード例 #2
0
ファイル: test-ctrig.c プロジェクト: kusumi/DragonFlyBSD
/* Test inputs that might cause overflow in a sloppy implementation. */
void
test_large(void)
{
	long double complex z;

	/* tanh() uses a threshold around x=22, so check both sides. */
	z = cpackl(21, 0.78539816339744830961566084581987572L);
	testall_odd_tol(ctanh, z,
	    cpackl(1.0, 1.14990445285871196133287617611468468e-18L), 1);
	z++;
	testall_odd_tol(ctanh, z,
	    cpackl(1.0, 1.55622644822675930314266334585597964e-19L), 1);

	z = cpackl(355, 0.78539816339744830961566084581987572L);
	testall_odd_tol(ctanh, z,
	    cpackl(1.0, 8.95257245135025991216632140458264468e-309L), 1);
	z = cpackl(30, 0x1p1023L);
	testall_odd_tol(ctanh, z,
	    cpackl(1.0, -1.62994325413993477997492170229268382e-26L), 1);
	z = cpackl(1, 0x1p1023L);
	testall_odd_tol(ctanh, z,
	    cpackl(0.878606311888306869546254022621986509L,
		   -0.225462792499754505792678258169527424L), 1);

	z = cpackl(710.6, 0.78539816339744830961566084581987572L);
	testall_odd_tol(csinh, z,
	    cpackl(1.43917579766621073533185387499658944e308L,
		   1.43917579766621073533185387499658944e308L), 1);
	testall_even_tol(ccosh, z,
	    cpackl(1.43917579766621073533185387499658944e308L,
		   1.43917579766621073533185387499658944e308L), 1);

	z = cpackl(1500, 0.78539816339744830961566084581987572L);
	testall_odd(csinh, z, cpackl(INFINITY, INFINITY), OPT_INEXACT,
	    FE_OVERFLOW, CS_BOTH);
	testall_even(ccosh, z, cpackl(INFINITY, INFINITY), OPT_INEXACT,
	    FE_OVERFLOW, CS_BOTH);
}
コード例 #3
0
ファイル: test-ctrig.c プロジェクト: kusumi/DragonFlyBSD
void
test_inf(void)
{
	static const long double finites[] = {
	    0, M_PI / 4, 3 * M_PI / 4, 5 * M_PI / 4,
	};
	long double complex z, c, s;
	int i;

	/*
	 * IN		CSINH		CCOSH		CTANH
	 * Inf,Inf	+-Inf,NaN inval	+-Inf,NaN inval	1,+-0
	 * Inf,finite	Inf cis(finite)	Inf cis(finite)	1,0 sin(2 finite)
	 * 0,Inf	+-0,NaN	inval	NaN,+-0 inval	NaN,NaN	inval
	 * finite,Inf	NaN,NaN inval	NaN,NaN inval	NaN,NaN inval
	 */
	z = cpackl(INFINITY, INFINITY);
	testall_odd(csinh, z, cpackl(INFINITY, NAN),
		    ALL_STD_EXCEPT, FE_INVALID, 0);
	testall_even(ccosh, z, cpackl(INFINITY, NAN),
		     ALL_STD_EXCEPT, FE_INVALID, 0);
	testall_odd(ctanh, z, cpackl(1, 0), ALL_STD_EXCEPT, 0, CS_REAL);
	testall_odd(csin, z, cpackl(NAN, INFINITY),
		    ALL_STD_EXCEPT, FE_INVALID, 0);
	testall_even(ccos, z, cpackl(INFINITY, NAN),
		     ALL_STD_EXCEPT, FE_INVALID, 0);
	testall_odd(ctan, z, cpackl(0, 1), ALL_STD_EXCEPT, 0, CS_REAL);

	/* XXX We allow spurious inexact exceptions here (hard to avoid). */
	for (i = 0; i < sizeof(finites) / sizeof(finites[0]); i++) {
		z = cpackl(INFINITY, finites[i]);
		c = INFINITY * cosl(finites[i]);
		s = finites[i] == 0 ? finites[i] : INFINITY * sinl(finites[i]);
		testall_odd(csinh, z, cpackl(c, s), OPT_INEXACT, 0, CS_BOTH);
		testall_even(ccosh, z, cpackl(c, s), OPT_INEXACT, 0, CS_BOTH);
		testall_odd(ctanh, z, cpackl(1, 0 * sin(finites[i] * 2)),
			    OPT_INEXACT, 0, CS_BOTH);
		z = cpackl(finites[i], INFINITY);
		testall_odd(csin, z, cpackl(s, c), OPT_INEXACT, 0, CS_BOTH);
		testall_even(ccos, z, cpackl(c, -s), OPT_INEXACT, 0, CS_BOTH);
		testall_odd(ctan, z, cpackl(0 * sin(finites[i] * 2), 1),
			    OPT_INEXACT, 0, CS_BOTH);
	}

	z = cpackl(0, INFINITY);
	testall_odd(csinh, z, cpackl(0, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);
	testall_even(ccosh, z, cpackl(NAN, 0), ALL_STD_EXCEPT, FE_INVALID, 0);
	testall_odd(ctanh, z, cpackl(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);
	z = cpackl(INFINITY, 0);
	testall_odd(csin, z, cpackl(NAN, 0), ALL_STD_EXCEPT, FE_INVALID, 0);
	testall_even(ccos, z, cpackl(NAN, 0), ALL_STD_EXCEPT, FE_INVALID, 0);
	testall_odd(ctan, z, cpackl(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);

	z = cpackl(42, INFINITY);
	testall_odd(csinh, z, cpackl(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);
	testall_even(ccosh, z, cpackl(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);
	/* XXX We allow a spurious inexact exception here. */
	testall_odd(ctanh, z, cpackl(NAN, NAN), OPT_INEXACT, FE_INVALID, 0);
	z = cpackl(INFINITY, 42);
	testall_odd(csin, z, cpackl(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);
	testall_even(ccos, z, cpackl(NAN, NAN), ALL_STD_EXCEPT, FE_INVALID, 0);
	/* XXX We allow a spurious inexact exception here. */
	testall_odd(ctan, z, cpackl(NAN, NAN), OPT_INEXACT, FE_INVALID, 0);
}
コード例 #4
0
ファイル: test-ctrig.c プロジェクト: kusumi/DragonFlyBSD
/*
 * Tests for NaN inputs.
 */
void
test_nan()
{
	long double complex nan_nan = cpackl(NAN, NAN);
	long double complex z;

	/*
	 * IN		CSINH		CCOSH		CTANH
	 * NaN,NaN	NaN,NaN		NaN,NaN		NaN,NaN
	 * finite,NaN	NaN,NaN [inval]	NaN,NaN [inval]	NaN,NaN [inval]
	 * NaN,finite	NaN,NaN [inval]	NaN,NaN [inval]	NaN,NaN [inval]
	 * NaN,Inf	NaN,NaN [inval]	NaN,NaN	[inval]	NaN,NaN [inval]
	 * Inf,NaN	+-Inf,NaN	Inf,NaN		1,+-0
	 * 0,NaN	+-0,NaN		NaN,+-0		NaN,NaN	[inval]
	 * NaN,0	NaN,0		NaN,+-0		NaN,0
	 */
	z = nan_nan;
	testall_odd(csinh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
	testall_even(ccosh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
	testall_odd(ctanh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
	testall_odd(csin, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
	testall_even(ccos, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
	testall_odd(ctan, z, nan_nan, ALL_STD_EXCEPT, 0, 0);

	z = cpackl(42, NAN);
	testall_odd(csinh, z, nan_nan, OPT_INVALID, 0, 0);
	testall_even(ccosh, z, nan_nan, OPT_INVALID, 0, 0);
	/* XXX We allow a spurious inexact exception here. */
	testall_odd(ctanh, z, nan_nan, OPT_INVALID & ~FE_INEXACT, 0, 0);
	testall_odd(csin, z, nan_nan, OPT_INVALID, 0, 0);
	testall_even(ccos, z, nan_nan, OPT_INVALID, 0, 0);
	testall_odd(ctan, z, nan_nan, OPT_INVALID, 0, 0);

	z = cpackl(NAN, 42);
	testall_odd(csinh, z, nan_nan, OPT_INVALID, 0, 0);
	testall_even(ccosh, z, nan_nan, OPT_INVALID, 0, 0);
	testall_odd(ctanh, z, nan_nan, OPT_INVALID, 0, 0);
	testall_odd(csin, z, nan_nan, OPT_INVALID, 0, 0);
	testall_even(ccos, z, nan_nan, OPT_INVALID, 0, 0);
	/* XXX We allow a spurious inexact exception here. */
	testall_odd(ctan, z, nan_nan, OPT_INVALID & ~FE_INEXACT, 0, 0);

	z = cpackl(NAN, INFINITY);
	testall_odd(csinh, z, nan_nan, OPT_INVALID, 0, 0);
	testall_even(ccosh, z, nan_nan, OPT_INVALID, 0, 0);
	testall_odd(ctanh, z, nan_nan, OPT_INVALID, 0, 0);
	testall_odd(csin, z, cpackl(NAN, INFINITY), ALL_STD_EXCEPT, 0, 0);
	testall_even(ccos, z, cpackl(INFINITY, NAN), ALL_STD_EXCEPT, 0,
	    CS_IMAG);
	testall_odd(ctan, z, cpackl(0, 1), ALL_STD_EXCEPT, 0, CS_IMAG);

	z = cpackl(INFINITY, NAN);
	testall_odd(csinh, z, cpackl(INFINITY, NAN), ALL_STD_EXCEPT, 0, 0);
	testall_even(ccosh, z, cpackl(INFINITY, NAN), ALL_STD_EXCEPT, 0,
		     CS_REAL);
	testall_odd(ctanh, z, cpackl(1, 0), ALL_STD_EXCEPT, 0, CS_REAL);
	testall_odd(csin, z, nan_nan, OPT_INVALID, 0, 0);
	testall_even(ccos, z, nan_nan, OPT_INVALID, 0, 0);
	testall_odd(ctan, z, nan_nan, OPT_INVALID, 0, 0);

	z = cpackl(0, NAN);
	testall_odd(csinh, z, cpackl(0, NAN), ALL_STD_EXCEPT, 0, 0);
	testall_even(ccosh, z, cpackl(NAN, 0), ALL_STD_EXCEPT, 0, 0);
	testall_odd(ctanh, z, nan_nan, OPT_INVALID, 0, 0);
	testall_odd(csin, z, cpackl(0, NAN), ALL_STD_EXCEPT, 0, CS_REAL);
	testall_even(ccos, z, cpackl(NAN, 0), ALL_STD_EXCEPT, 0, 0);
	testall_odd(ctan, z, cpackl(0, NAN), ALL_STD_EXCEPT, 0, CS_REAL);

	z = cpackl(NAN, 0);
	testall_odd(csinh, z, cpackl(NAN, 0), ALL_STD_EXCEPT, 0, CS_IMAG);
	testall_even(ccosh, z, cpackl(NAN, 0), ALL_STD_EXCEPT, 0, 0);
	testall_odd(ctanh, z, cpackl(NAN, 0), ALL_STD_EXCEPT, 0, CS_IMAG);
	testall_odd(csin, z, cpackl(NAN, 0), ALL_STD_EXCEPT, 0, 0);
	testall_even(ccos, z, cpackl(NAN, 0), ALL_STD_EXCEPT, 0, 0);
	testall_odd(ctan, z, nan_nan, OPT_INVALID, 0, 0);
}
コード例 #5
0
ファイル: test-invctrig.c プロジェクト: ChaosJohn/freebsd
/*
 * Tests for NaN inputs.
 */
void
test_nan()
{
	long double complex nan_nan = CMPLXL(NAN, NAN);
	long double complex z;

	/*
	 * IN		CACOSH	    CACOS	CASINH	    CATANH
	 * NaN,NaN	NaN,NaN	    NaN,NaN	NaN,NaN	    NaN,NaN
	 * finite,NaN	NaN,NaN*    NaN,NaN*	NaN,NaN*    NaN,NaN*
	 * NaN,finite   NaN,NaN*    NaN,NaN*	NaN,NaN*    NaN,NaN*
	 * NaN,Inf	Inf,NaN     NaN,-Inf	?Inf,NaN    ?0,pi/2	
	 * +-Inf,NaN	Inf,NaN     NaN,?Inf	+-Inf,NaN   +-0,NaN
	 * +-0,NaN	NaN,NaN*    pi/2,NaN	NaN,NaN*    +-0,NaN
	 * NaN,0	NaN,NaN*    NaN,NaN*	NaN,0	    NaN,NaN*
	 *
	 *  * = raise invalid
	 */
	z = nan_nan;
	testall(cacosh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
	testall(cacos, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
	testall(casinh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
	testall(casin, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
	testall(catanh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
	testall(catan, z, nan_nan, ALL_STD_EXCEPT, 0, 0);

	z = CMPLXL(0.5, NAN);
	testall(cacosh, z, nan_nan, OPT_INVALID, 0, 0);
	testall(cacos, z, nan_nan, OPT_INVALID, 0, 0);
	testall(casinh, z, nan_nan, OPT_INVALID, 0, 0);
	testall(casin, z, nan_nan, OPT_INVALID, 0, 0);
	testall(catanh, z, nan_nan, OPT_INVALID, 0, 0);
	testall(catan, z, nan_nan, OPT_INVALID, 0, 0);

	z = CMPLXL(NAN, 0.5);
	testall(cacosh, z, nan_nan, OPT_INVALID, 0, 0);
	testall(cacos, z, nan_nan, OPT_INVALID, 0, 0);
	testall(casinh, z, nan_nan, OPT_INVALID, 0, 0);
	testall(casin, z, nan_nan, OPT_INVALID, 0, 0);
	testall(catanh, z, nan_nan, OPT_INVALID, 0, 0);
	testall(catan, z, nan_nan, OPT_INVALID, 0, 0);

	z = CMPLXL(NAN, INFINITY);
	testall(cacosh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0, CS_REAL);
	testall(cacosh, -z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0, CS_REAL);
	testall(cacos, z, CMPLXL(NAN, -INFINITY), ALL_STD_EXCEPT, 0, CS_IMAG);
	testall(casinh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0, 0);
	testall(casin, z, CMPLXL(NAN, INFINITY), ALL_STD_EXCEPT, 0, CS_IMAG);
	testall_tol(catanh, z, CMPLXL(0.0, pi / 2), 1);
	testall(catan, z, CMPLXL(NAN, 0.0), ALL_STD_EXCEPT, 0, CS_IMAG);

	z = CMPLXL(INFINITY, NAN);
	testall_even(cacosh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0,
		     CS_REAL);
	testall_even(cacos, z, CMPLXL(NAN, INFINITY), ALL_STD_EXCEPT, 0, 0);
	testall_odd(casinh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0,
		    CS_REAL);
	testall_odd(casin, z, CMPLXL(NAN, INFINITY), ALL_STD_EXCEPT, 0, 0);
	testall_odd(catanh, z, CMPLXL(0.0, NAN), ALL_STD_EXCEPT, 0, CS_REAL);
	testall_odd_tol(catan, z, CMPLXL(pi / 2, 0.0), 1);

	z = CMPLXL(0.0, NAN);
        /* XXX We allow a spurious inexact exception here. */
	testall_even(cacosh, z, nan_nan, OPT_INVALID & ~FE_INEXACT, 0, 0);
	testall_even_tol(cacos, z, CMPLXL(pi / 2, NAN), 1);
	testall_odd(casinh, z, nan_nan, OPT_INVALID, 0, 0);
	testall_odd(casin, z, CMPLXL(0.0, NAN), ALL_STD_EXCEPT, 0, CS_REAL);
	testall_odd(catanh, z, CMPLXL(0.0, NAN), OPT_INVALID, 0, CS_REAL);
	testall_odd(catan, z, nan_nan, OPT_INVALID, 0, 0);

	z = CMPLXL(NAN, 0.0);
	testall(cacosh, z, nan_nan, OPT_INVALID, 0, 0);
	testall(cacos, z, nan_nan, OPT_INVALID, 0, 0);
	testall(casinh, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, 0, CS_IMAG);
	testall(casin, z, nan_nan, OPT_INVALID, 0, 0);
	testall(catanh, z, nan_nan, OPT_INVALID, 0, CS_IMAG);
	testall(catan, z, CMPLXL(NAN, 0.0), ALL_STD_EXCEPT, 0, 0);
}