Skip to content

Commit 0ddba87

Browse files
committed
Fix bug in tests to deal with non-IEEE exponent ranges
1 parent ed3b89f commit 0ddba87

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

test/cpfloat_test.ts

+20-8
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,9 @@ void check_array_stoc_double(double *tmpin, double *tmpout,
496496
ck_abort_msg("Not rounding to either closest number.");
497497
fpopts->round = mode;
498498
if (fabs(counter[0]/NREPS - prounddown[i % 3]) > 0.1) {
499-
printf("%e\n", fabs(counter[0]/NREPS - prounddown[i % 3]));
499+
printf("DOUBLE\n");
500+
printf("***\ni = %ld\nexp = %23.15e\nact = %23.15e\n",
501+
i, counter[0]/NREPS, prounddown[i % 3]);
500502
ck_abort_msg("Error in stochasting rounding.");
501503
}
502504
}
@@ -527,7 +529,9 @@ void check_array_stoc_float(float *tmpin, float *tmpout,
527529
ck_abort_msg("Not rounding to either closest number.");
528530
fpopts->round = mode;
529531
if (fabs(counter[0]/(double)NREPS - prounddown[i % 3]) > 0.1) {
530-
printf("%e\n", fabs(counter[0]/NREPS - prounddown[i % 3]));
532+
printf("FLOAT\n");
533+
printf("***\ni = %ld\nexp = %23.15e\nact = %23.15e\n",
534+
i, counter[0]/NREPS, prounddown[i % 3]);
531535
ck_abort_msg("Error in stochasting rounding.");
532536
}
533537
}
@@ -548,7 +552,9 @@ void check_array_equi_double(double *tmpin, double *tmpout,
548552
else
549553
counter[0]++;
550554
if (fabs(counter[0]/NREPS - *prounddown) > 0.1) {
551-
printf("%e\n", fabs(counter[0]/NREPS - prounddown[i % 3]));
555+
printf("DOUBLE\n");
556+
printf("***\ni = %ld\nexp = %23.15e\nact = %23.15e\n",
557+
i, counter[0]/NREPS, prounddown[i % 3]);
552558
ck_abort_msg("Error in stochasting rounding.");
553559
}
554560
}
@@ -569,7 +575,9 @@ void check_array_equi_float(float *tmpin, float *tmpout,
569575
else
570576
counter[0]++;
571577
if (fabs(counter[0]/(double)NREPS - *prounddown) > 0.1) {
572-
printf("%e\n", fabs(counter[0]/NREPS - prounddown[i % 3]));
578+
printf("FLOAT\n");
579+
printf("***\ni = %ld\nexp = %23.15e\nact = %23.15e\n",
580+
i, counter[0]/NREPS, prounddown[i % 3]);
573581
ck_abort_msg("Error in stochasting rounding.");
574582
}
575583
}
@@ -974,7 +982,8 @@ for (size_t mode = 1; mode < 3; mode++) {
974982
fpopts->precision = precision[i];
975983
fpopts->emax = emax[i];
976984
fpopts->emin = emin[i];
977-
size_t n = ldexp(1., fpopts->precision-1) * 2 * fpopts->emax;
985+
size_t n = ldexp(1., fpopts->precision-1) *
986+
(fpopts->emax - fpopts->emin + 1);
978987
uint64_t *xd = malloc(n * sizeof(*xd));
979988
init_intarray_double(xd, n, intminnormal_double(fpopts),
980989
1ul << (52-fpopts->precision + 1));
@@ -1690,7 +1699,8 @@ for (size_t mode = 1; mode < 3; mode++) {
16901699
fpopts->precision = precision[i];
16911700
fpopts->emax = emax[i];
16921701
fpopts->emin = emin[i];
1693-
size_t n = 3 * (ldexp(1., fpopts->precision-1) * 2 * fpopts->emax - 1);
1702+
size_t n = 3 *
1703+
(ldexp(1., fpopts->precision-1) * (fpopts->emax - fpopts->emin + 1) - 1);
16941704
uint64_t *xd_imm = malloc(n * sizeof(*xd_imm));
16951705
uint64_t *refd = malloc(n * sizeof(*refd));
16961706
double *xd = malloc(n * sizeof(*xd));
@@ -2103,7 +2113,8 @@ for (size_t mode = 1; mode < 3; mode++ ) {
21032113
fpopts->emax = emax[i];
21042114
fpopts->emin = emin[i];
21052115

2106-
size_t n = 3 * (ldexp(1., fpopts->precision-1) * 2 * fpopts->emax - 1);
2116+
size_t n = 3 * (ldexp(1., fpopts->precision-1)
2117+
* (fpopts->emax - fpopts->emin +1) - 1);
21072118
uint64_t *xd = malloc(n * sizeof(*xd));
21082119
double xmin = minnormal(fpopts);
21092120
uint64_t stepd = 1ul << (52-fpopts->precision + 1);
@@ -2742,7 +2753,8 @@ for (size_t mode = 3; mode < 3; mode++) {
27422753
fpopts->emax = emax[i];
27432754
fpopts->emin = emin[i];
27442755

2745-
size_t n = ldexp(1., fpopts->precision-1) * 2 * fpopts->emax + 2;
2756+
size_t n = ldexp(1., fpopts->precision-1) *
2757+
(fpopts->emax - fpopts->emin + 1) + 2;
27462758
double *ad = malloc(n * sizeof(*ad));
27472759
double *xd = allocate_array_double(ad, n, mode);
27482760
double *refd = malloc(n * sizeof(*refd));

0 commit comments

Comments
 (0)