diff options
| author | flatmush <flatmush@d3e1167c-abe1-51d5-8199-f9061ebe54e4> | 2011-02-24 17:18:08 +0000 |
|---|---|---|
| committer | flatmush <flatmush@d3e1167c-abe1-51d5-8199-f9061ebe54e4> | 2011-02-24 17:18:08 +0000 |
| commit | d829f83d313ca472ef565ad8da3834c2c5f23b7e (patch) | |
| tree | b25d372b0b6278dc8ef359ee703a13a79a89faad | |
| parent | 3fc97475e182d03053bfcac327b916db5a9ee2a1 (diff) | |
| download | libfixmath-d829f83d313ca472ef565ad8da3834c2c5f23b7e.tar.gz | |
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.
| -rw-r--r-- | libfixmath/fix16_trig.c | 27 | ||||
| -rw-r--r-- | 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 @@ <Compiler> <Add option="-Wall" /> <Add option="-g" /> + <Add option="-DFIXMATH_NO_CACHE" /> </Compiler> </Target> <Target title="rel"> |
