[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 06/13: runtime: math: in fast_atan2f, moved
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 06/13: runtime: math: in fast_atan2f, moved nested if that checks for divide by zero out into its own check. |
Date: |
Thu, 4 Dec 2014 16:21:50 +0000 (UTC) |
This is an automated email from the git hooks/post-receive script.
trondeau pushed a commit to branch maint
in repository gnuradio.
commit 114494fabbeb552ebe7b40fb6344418ffac8e736
Author: Tom Rondeau <address@hidden>
Date: Tue Nov 25 09:03:50 2014 -0500
runtime: math: in fast_atan2f, moved nested if that checks for divide by
zero out into its own check.
This change mostly affects ARM processors. They seem to not do well with
nest branches whereas x86 do fine. Breaking out this nested if makes no
computational difference on x86 but makes a ~5-6% improvement for the ARMv7
tests.
Also updates the docs to reflect the new mean error from the function.
---
gnuradio-runtime/lib/math/fast_atan2f.cc | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/gnuradio-runtime/lib/math/fast_atan2f.cc
b/gnuradio-runtime/lib/math/fast_atan2f.cc
index a5ff1cd..f968310 100644
--- a/gnuradio-runtime/lib/math/fast_atan2f.cc
+++ b/gnuradio-runtime/lib/math/fast_atan2f.cc
@@ -118,7 +118,7 @@ namespace gr {
determine the final angle value in the range of -180 to 180
degrees. Note that this function uses the small angle approximation
for values close to zero. This routine calculates the arc tangent
- with an average error of +/- 0.045 degrees.
+ with an average error of +/- 3.56e-5 degrees (6.21e-7 radians).
*****************************************************************************/
float
@@ -131,11 +131,14 @@ namespace gr {
/* normalize to +/- 45 degree range */
y_abs = fabsf(y);
x_abs = fabsf(x);
+ /* don't divide by zero! */
+ if(!((y_abs > 0.0f) || (x_abs > 0.0f)))
+ return 0.0;
- if (y_abs < x_abs)
- if (x_abs > 0.0) z = y_abs / x_abs; else return 0.0;
+ if(y_abs < x_abs)
+ z = y_abs / x_abs;
else
- if (y_abs > 0.0) z = x_abs / y_abs; else return 0.0;
+ z = x_abs / y_abs;
/* when ratio approaches the table resolution, the angle is */
/* best approximated with the argument itself... */
- [Commit-gnuradio] [gnuradio] branch maint updated (689f507 -> ec05c9b), git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 05/13: Merge remote-tracking branch 'st0ne/maint' into maint, git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 02/13: modified the qa tests to the correct values., git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 01/13: Corrected the fast_atan2f function. Recalculated the table and corrected some errors in the code. Error before correction: <0.111 degrees. Error after correction: <8.20E-5 degrees Some QA tests failed after correcting fast_atan2f function. The tests were also fixed., git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 04/13: Checking for NaN takes too much time. With some incompatibility to cmath atan2 for some NaN/Inf combinations the performance is better now. This change should not have any impact in SDR related things. It is only for checking NaN/Inf values., git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 13/13: logger: fixed a problem with the Python loggers not respecting the log_file and debug_file settings in the logger preferences file., git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 07/13: runtime: math: reset a QA test for the fast_atan2f for mixed nan/inf input., git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 06/13: runtime: math: in fast_atan2f, moved nested if that checks for divide by zero out into its own check.,
git <=
- [Commit-gnuradio] [gnuradio] 08/13: qtgui: compare current time domain x-axis unit with new unit to ensure time scale update., git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 03/13: cleaned the code, git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 11/13: filter: fixed default filter for rational_resampler., git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 12/13: filter: adds documentation to using the rational resamplers., git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 09/13: digital: fixes issues with the constellation soft decoder, specifically how the decisions are calculated in the C++ code and some issues with the QAM16 constellation in particular., git, 2014/12/04
- [Commit-gnuradio] [gnuradio] 10/13: digtial: adding example to explore the constellation decoder and soft decoder for different constellations., git, 2014/12/04