From d829f83d313ca472ef565ad8da3834c2c5f23b7e Mon Sep 17 00:00:00 2001 From: flatmush Date: Thu, 24 Feb 2011 17:18:08 +0000 Subject: Updated fix16_atan, now removes some un-necessary code. Added FIXMATH_NO_ROUNDING macro to disable rounding, currently only applies to fix16_atan but will change to apply this to other operations (namely mul/div) too. Changed optimization options for rel build in code::blocks project. --- libfixmath/fix16_trig.c | 27 ++++++++++++++++----------- libfixmath/libfixmath.cbp | 1 + 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/libfixmath/fix16_trig.c b/libfixmath/fix16_trig.c index 2e0ec5a..6533a52 100644 --- a/libfixmath/fix16_trig.c +++ b/libfixmath/fix16_trig.c @@ -87,9 +87,14 @@ fix16_t fix16_atan2(fix16_t inY , fix16_t inX) { int64_t angle; angle = (4216574283LL * -i) / j; is = (i * i); - is = (is + (1LL << 15)) >> 16; js = (j * j); + #ifdef FIXMATH_NO_ROUNDING + is >>= 16; + js >>= 16; + #else + is = (is + (1LL << 15)) >> 16; js = (js + (1LL << 15)) >> 16; + #endif if((is | js) >> 32) { if((is | js) >> 40) { is >>= 16; @@ -100,22 +105,22 @@ fix16_t fix16_atan2(fix16_t inY , fix16_t inX) { } } is = (is * i); - is = (is + (1LL << 15)) >> 16; js = (js * j); + #ifdef FIXMATH_NO_ROUNDING + is >>= 16; + js >>= 16; + #else + is = (is + (1LL << 15)) >> 16; js = (js + (1LL << 15)) >> 16; - if((is | js) >> 50) { - if((is | js) >> 57) { - is >>= 14; - js >>= 14; - } else { - is >>= 7; - js >>= 7; - } - } + #endif is = is * 51472LL; angle += (is / js) << 14; angle += (inX >= 0 ? 3373259426LL : 10119778278LL); + #ifdef FIXMATH_NO_ROUNDING + angle >>= 16; + #else angle = (angle + (1LL << 15)) >> 16; + #endif angle = (inY < 0 ? -angle : angle); #ifndef FIXMATH_NO_CACHE diff --git a/libfixmath/libfixmath.cbp b/libfixmath/libfixmath.cbp index c88b66b..d9264ea 100644 --- a/libfixmath/libfixmath.cbp +++ b/libfixmath/libfixmath.cbp @@ -16,6 +16,7 @@ + -- cgit v1.2.3