From f53202b53f9c8d1294219ec67d3a298fd59f2bef Mon Sep 17 00:00:00 2001 From: erdgeist Date: Tue, 7 Oct 2014 15:53:27 +0200 Subject: Add test code to check reliablity of fixexp(), for sufficently large absolute values (>0.00013) our error is below 0.2%) --- fixpow.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/fixpow.c b/fixpow.c index 3db6df3..a023f7a 100644 --- a/fixpow.c +++ b/fixpow.c @@ -256,10 +256,16 @@ int main() // Testing fixexp for (input=-2147483648; input < TO_Q26(10.39720770839918); ++input ) { - int32_t expected = TO_Q16(exp(FROM_Q26(input))); - int32_t output = fixexp(input); - if( abs(output-expected) > 16 ) - printf( "%08X : %08X = %08X (%08d)\n", output, expected, abs(output-expected), input ); + double expected = exp(FROM_Q26(input)); + int32_t expected_int = TO_Q16(expected); + int32_t output_int = fixexp(input); + double output = FROM_Q16(output_int); + if( abs(output_int-expected_int) > 8 ) { + if( expected > output && output > 0 && expected / output > 1.002 ) + printf( "%08X : %08X = %08X (%08d)\n", output_int, expected_int, abs(output_int-expected_int), input ); + if( expected < output && expected > 0 && output / expected > 1.002 ) + printf( "%08X : %08X = %08X (%08d)\n", output_int, expected_int, abs(output_int-expected_int), input ); + } } printf( "pow(%lf,%lf)=%lf (%s)\n", base, exponent, FROM_Q16(result), error?"ERROR":"OK" ); -- cgit v1.2.3