diff options
author | erdgeist <erdgeist@erdgeist.org> | 2014-10-07 15:53:27 +0200 |
---|---|---|
committer | erdgeist <erdgeist@erdgeist.org> | 2014-10-07 15:53:27 +0200 |
commit | f53202b53f9c8d1294219ec67d3a298fd59f2bef (patch) | |
tree | 2f64efccedab641f3af9f88aa2f4fda692f8b6ab | |
parent | da540be956937b49beba8e02569f16b80561c5a8 (diff) |
Add test code to check reliablity of fixexp(), for sufficently large absolute values (>0.00013) our error is below 0.2%)HEADmaster
-rw-r--r-- | fixpow.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -256,10 +256,16 @@ int main() | |||
256 | 256 | ||
257 | // Testing fixexp | 257 | // Testing fixexp |
258 | for (input=-2147483648; input < TO_Q26(10.39720770839918); ++input ) { | 258 | for (input=-2147483648; input < TO_Q26(10.39720770839918); ++input ) { |
259 | int32_t expected = TO_Q16(exp(FROM_Q26(input))); | 259 | double expected = exp(FROM_Q26(input)); |
260 | int32_t output = fixexp(input); | 260 | int32_t expected_int = TO_Q16(expected); |
261 | if( abs(output-expected) > 16 ) | 261 | int32_t output_int = fixexp(input); |
262 | printf( "%08X : %08X = %08X (%08d)\n", output, expected, abs(output-expected), input ); | 262 | double output = FROM_Q16(output_int); |
263 | if( abs(output_int-expected_int) > 8 ) { | ||
264 | if( expected > output && output > 0 && expected / output > 1.002 ) | ||
265 | printf( "%08X : %08X = %08X (%08d)\n", output_int, expected_int, abs(output_int-expected_int), input ); | ||
266 | if( expected < output && expected > 0 && output / expected > 1.002 ) | ||
267 | printf( "%08X : %08X = %08X (%08d)\n", output_int, expected_int, abs(output_int-expected_int), input ); | ||
268 | } | ||
263 | } | 269 | } |
264 | 270 | ||
265 | printf( "pow(%lf,%lf)=%lf (%s)\n", base, exponent, FROM_Q16(result), error?"ERROR":"OK" ); | 271 | printf( "pow(%lf,%lf)=%lf (%s)\n", base, exponent, FROM_Q16(result), error?"ERROR":"OK" ); |