Commit f58bda64 authored by Martin Storsjö's avatar Martin Storsjö

checkasm: af_afir: Use a dynamic tolerance depending on values

As the values generated by av_bmg_get can be arbitrarily large
(only the stddev is specified), we can't use a fixed tolerance.
Calculate a dynamic tolerance (like in float_dsp from 38f966b2),
based on the individual steps of the calculation.

This fixes running this test with certain seeds, when built with
clang for mingw/x86_32.
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 9d1f7870
...@@ -53,7 +53,19 @@ static void test_fcmul_add(const float *src0, const float *src1, const float *sr ...@@ -53,7 +53,19 @@ static void test_fcmul_add(const float *src0, const float *src1, const float *sr
call_ref(cdst, src1, src2, LEN); call_ref(cdst, src1, src2, LEN);
call_new(odst, src1, src2, LEN); call_new(odst, src1, src2, LEN);
for (i = 0; i <= LEN*2; i++) { for (i = 0; i <= LEN*2; i++) {
if (!float_near_abs_eps(cdst[i], odst[i], 6.2e-05)) { int idx = i & ~1;
float cre = src2[idx];
float cim = src2[idx + 1];
float tre = src1[idx];
float tim = src1[idx + 1];
double t = fabs(src0[i]) +
fabs(tre) + fabs(tim) + fabs(cre) + fabs(cim) +
fabs(tre * cre) + fabs(tim * cim) +
fabs(tre * cim) + fabs(tim * cre) +
fabs(tre * cre - tim * cim) +
fabs(tre * cim + tim * cre) +
fabs(cdst[i]) + 1.0;
if (!float_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) {
fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n", fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
i, cdst[i], odst[i], cdst[i] - odst[i]); i, cdst[i], odst[i], cdst[i] - odst[i]);
fail(); fail();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment