Changeset View
Changeset View
Standalone View
Standalone View
head/tools/regression/lib/msun/test-trig.c
Show All 30 Lines | |||||
* | * | ||||
* The program for generating representable numbers near multiples of pi is | * The program for generating representable numbers near multiples of pi is | ||||
* available at http://www.cs.berkeley.edu/~wkahan/testpi/ . | * available at http://www.cs.berkeley.edu/~wkahan/testpi/ . | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include <sys/param.h> | |||||
#include <assert.h> | #include <assert.h> | ||||
#include <fenv.h> | #include <fenv.h> | ||||
#include <float.h> | #include <float.h> | ||||
#include <math.h> | #include <math.h> | ||||
#include <stdio.h> | #include <stdio.h> | ||||
#include "test-utils.h" | #include "test-utils.h" | ||||
#define LEN(a) (sizeof(a) / sizeof((a)[0])) | |||||
#pragma STDC FENV_ACCESS ON | #pragma STDC FENV_ACCESS ON | ||||
/* | /* | ||||
* Test that a function returns the correct value and sets the | * Test that a function returns the correct value and sets the | ||||
* exception flags correctly. The exceptmask specifies which | * exception flags correctly. The exceptmask specifies which | ||||
* exceptions we should check. We need to be lenient for several | * exceptions we should check. We need to be lenient for several | ||||
* reasons, but mainly because on some architectures it's impossible | * reasons, but mainly because on some architectures it's impossible | ||||
* to raise FE_OVERFLOW without raising FE_INEXACT. | * to raise FE_OVERFLOW without raising FE_INEXACT. | ||||
▲ Show 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | |||||
#elif LDBL_MANT_DIG == 113 | #elif LDBL_MANT_DIG == 113 | ||||
static const long double ld_pi_odd[] = { | static const long double ld_pi_odd[] = { | ||||
/* XXX */ | /* XXX */ | ||||
}; | }; | ||||
#endif | #endif | ||||
int i; | int i; | ||||
for (i = 0; i < LEN(f_pi_odd); i++) { | for (i = 0; i < nitems(f_pi_odd); i++) { | ||||
assert(fabs(sinf(f_pi_odd[i])) < FLT_EPSILON); | assert(fabs(sinf(f_pi_odd[i])) < FLT_EPSILON); | ||||
assert(cosf(f_pi_odd[i]) == -1.0); | assert(cosf(f_pi_odd[i]) == -1.0); | ||||
assert(fabs(tan(f_pi_odd[i])) < FLT_EPSILON); | assert(fabs(tan(f_pi_odd[i])) < FLT_EPSILON); | ||||
assert(fabs(sinf(-f_pi_odd[i])) < FLT_EPSILON); | assert(fabs(sinf(-f_pi_odd[i])) < FLT_EPSILON); | ||||
assert(cosf(-f_pi_odd[i]) == -1.0); | assert(cosf(-f_pi_odd[i]) == -1.0); | ||||
assert(fabs(tanf(-f_pi_odd[i])) < FLT_EPSILON); | assert(fabs(tanf(-f_pi_odd[i])) < FLT_EPSILON); | ||||
assert(fabs(sinf(f_pi_odd[i] * 2)) < FLT_EPSILON); | assert(fabs(sinf(f_pi_odd[i] * 2)) < FLT_EPSILON); | ||||
assert(cosf(f_pi_odd[i] * 2) == 1.0); | assert(cosf(f_pi_odd[i] * 2) == 1.0); | ||||
assert(fabs(tanf(f_pi_odd[i] * 2)) < FLT_EPSILON); | assert(fabs(tanf(f_pi_odd[i] * 2)) < FLT_EPSILON); | ||||
assert(fabs(sinf(-f_pi_odd[i] * 2)) < FLT_EPSILON); | assert(fabs(sinf(-f_pi_odd[i] * 2)) < FLT_EPSILON); | ||||
assert(cosf(-f_pi_odd[i] * 2) == 1.0); | assert(cosf(-f_pi_odd[i] * 2) == 1.0); | ||||
assert(fabs(tanf(-f_pi_odd[i] * 2)) < FLT_EPSILON); | assert(fabs(tanf(-f_pi_odd[i] * 2)) < FLT_EPSILON); | ||||
} | } | ||||
for (i = 0; i < LEN(d_pi_odd); i++) { | for (i = 0; i < nitems(d_pi_odd); i++) { | ||||
assert(fabs(sin(d_pi_odd[i])) < 2 * DBL_EPSILON); | assert(fabs(sin(d_pi_odd[i])) < 2 * DBL_EPSILON); | ||||
assert(cos(d_pi_odd[i]) == -1.0); | assert(cos(d_pi_odd[i]) == -1.0); | ||||
assert(fabs(tan(d_pi_odd[i])) < 2 * DBL_EPSILON); | assert(fabs(tan(d_pi_odd[i])) < 2 * DBL_EPSILON); | ||||
assert(fabs(sin(-d_pi_odd[i])) < 2 * DBL_EPSILON); | assert(fabs(sin(-d_pi_odd[i])) < 2 * DBL_EPSILON); | ||||
assert(cos(-d_pi_odd[i]) == -1.0); | assert(cos(-d_pi_odd[i]) == -1.0); | ||||
assert(fabs(tan(-d_pi_odd[i])) < 2 * DBL_EPSILON); | assert(fabs(tan(-d_pi_odd[i])) < 2 * DBL_EPSILON); | ||||
assert(fabs(sin(d_pi_odd[i] * 2)) < 2 * DBL_EPSILON); | assert(fabs(sin(d_pi_odd[i] * 2)) < 2 * DBL_EPSILON); | ||||
assert(cos(d_pi_odd[i] * 2) == 1.0); | assert(cos(d_pi_odd[i] * 2) == 1.0); | ||||
assert(fabs(tan(d_pi_odd[i] * 2)) < 2 * DBL_EPSILON); | assert(fabs(tan(d_pi_odd[i] * 2)) < 2 * DBL_EPSILON); | ||||
assert(fabs(sin(-d_pi_odd[i] * 2)) < 2 * DBL_EPSILON); | assert(fabs(sin(-d_pi_odd[i] * 2)) < 2 * DBL_EPSILON); | ||||
assert(cos(-d_pi_odd[i] * 2) == 1.0); | assert(cos(-d_pi_odd[i] * 2) == 1.0); | ||||
assert(fabs(tan(-d_pi_odd[i] * 2)) < 2 * DBL_EPSILON); | assert(fabs(tan(-d_pi_odd[i] * 2)) < 2 * DBL_EPSILON); | ||||
} | } | ||||
#if LDBL_MANT_DIG > 53 | #if LDBL_MANT_DIG > 53 | ||||
for (i = 0; i < LEN(ld_pi_odd); i++) { | for (i = 0; i < nitems(ld_pi_odd); i++) { | ||||
assert(fabsl(sinl(ld_pi_odd[i])) < LDBL_EPSILON); | assert(fabsl(sinl(ld_pi_odd[i])) < LDBL_EPSILON); | ||||
assert(cosl(ld_pi_odd[i]) == -1.0); | assert(cosl(ld_pi_odd[i]) == -1.0); | ||||
assert(fabsl(tanl(ld_pi_odd[i])) < LDBL_EPSILON); | assert(fabsl(tanl(ld_pi_odd[i])) < LDBL_EPSILON); | ||||
assert(fabsl(sinl(-ld_pi_odd[i])) < LDBL_EPSILON); | assert(fabsl(sinl(-ld_pi_odd[i])) < LDBL_EPSILON); | ||||
assert(cosl(-ld_pi_odd[i]) == -1.0); | assert(cosl(-ld_pi_odd[i]) == -1.0); | ||||
assert(fabsl(tanl(-ld_pi_odd[i])) < LDBL_EPSILON); | assert(fabsl(tanl(-ld_pi_odd[i])) < LDBL_EPSILON); | ||||
▲ Show 20 Lines • Show All 77 Lines • Show Last 20 Lines |