[svn-r13238] A trial fix for the comparison of equality between floating-point values in hyperslab.c. A few

macros are defined in h5test.h to check if the difference between two values is smaller than Epsilon.
This commit is contained in:
Raymond Lu 2007-02-05 14:22:26 -05:00
parent 08ea58bac2
commit a82e85c2d4
2 changed files with 20 additions and 1 deletions

View File

@ -117,6 +117,21 @@ extern MPI_Info h5_io_info_g; /* MPI INFO object for IO */
/* set alarms to N seconds if N > 0, else use default alarm_seconds. */
#define ALARM_SET(N) HDalarm((N)>0 ? N : alarm_seconds)
/*
* The methods to compare the equality of floating-point values:
* 1. XXX_ABS_EQUAL - check if the difference is smaller than the
* Epsilon value. The Epsilon values, FLT_EPSILON, DBL_EPSILON,
* and LDBL_EPSILON, are defined by compiler in float.h.
* 2. To be defined later.
*/
#define FLT_ABS_EQUAL(X,Y) (fabsf(X-Y)<FLT_EPSILON)
#define DBL_ABS_EQUAL(X,Y) (fabs(X-Y)<DBL_EPSILON)
#define LDBL_ABS_EQUAL(X,Y) (fabsl(X-Y)<LDBL_EPSILON)
/*#define FP_ABS_UNEQUAL(X,Y,T) ((T==1 && fabsf(X-Y)>FLT_EPSILON) || \
(T==2 && fabs(X-Y)>DBL_EPSILON) || \
(T==3 && fabsl(X-Y)>LDBL_EPSILON))*/
#ifdef __cplusplus
extern "C" {
#endif

View File

@ -663,7 +663,11 @@ test_multifill(size_t nx)
for (i = 0; i < nx; i++) {
if (dst[i].left != 3333333) {
sprintf(s, "bad dst[%lu].left", (unsigned long)i);
} else if (dst[i].mid != fill.mid) {
} else if (!DBL_ABS_EQUAL(dst[i].mid, fill.mid)) {
/* Check if two DOUBLE values are equal. If their difference
* is smaller than the EPSILON value for double, they are
* considered equal. See the definition in h5test.h.
*/
sprintf(s, "bad dst[%lu].mid", (unsigned long)i);
} else if (dst[i].right != 4444444) {
sprintf(s, "bad dst[%lu].right", (unsigned long)i);