diff options
author | aiph <philipp.aigner@orderman.com> | 2014-11-21 15:10:30 +0100 |
---|---|---|
committer | aiph <philipp.aigner@orderman.com> | 2014-11-21 15:10:30 +0100 |
commit | f863b5ced051105dc6379d4a7bb7b69821c5ad5b (patch) | |
tree | b0c7ab0942691db0b1fee5daad3829fb86aca7ef | |
parent | eee9ec984898cae90934881392fdc88da1d63ea8 (diff) |
modified the qa tests to the correct values.
-rw-r--r-- | gnuradio-runtime/lib/math/fast_atan2f.cc | 16 | ||||
-rw-r--r-- | gnuradio-runtime/lib/math/qa_fast_atan2f.cc | 56 |
2 files changed, 43 insertions, 29 deletions
diff --git a/gnuradio-runtime/lib/math/fast_atan2f.cc b/gnuradio-runtime/lib/math/fast_atan2f.cc index d78ca5d84e..fbee832050 100644 --- a/gnuradio-runtime/lib/math/fast_atan2f.cc +++ b/gnuradio-runtime/lib/math/fast_atan2f.cc @@ -132,15 +132,25 @@ namespace gr { 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 ((x_abs == 0.0) && (y_abs == 0.0)) + return 0.0; + + /* check if one of the both is NaN */ + if (isnan(y_abs)) + return y; + + if (isnan(x_abs)) + return x; - //z = (y_abs < x_abs ? y_abs / x_abs : x_abs / y_abs); if(y_abs < x_abs) z = y_abs / x_abs; else z = x_abs / y_abs; + /* check if z is NaN */ + if (isnan(z)) + return z; + /* when ratio approaches the table resolution, the angle is */ /* best approximated with the argument itself... */ if(z < TAN_MAP_RES) diff --git a/gnuradio-runtime/lib/math/qa_fast_atan2f.cc b/gnuradio-runtime/lib/math/qa_fast_atan2f.cc index b704756798..1d1cea0008 100644 --- a/gnuradio-runtime/lib/math/qa_fast_atan2f.cc +++ b/gnuradio-runtime/lib/math/qa_fast_atan2f.cc @@ -47,11 +47,11 @@ qa_fast_atan2f::t1() for(float j =-N/2; i < N/2; i++) { float x = i/10.0; float y = j/10.0; - c_atan2 = atan2(x, y); + c_atan2 = atan2(y, x); - gr_atan2f = gr::fast_atan2f(x, y); + gr_atan2f = gr::fast_atan2f(y, x); - CPPUNIT_ASSERT_DOUBLES_EQUAL(c_atan2, gr_atan2f, 0.0001); + CPPUNIT_ASSERT_DOUBLES_EQUAL(c_atan2, gr_atan2f,0.000083); } } } @@ -69,71 +69,75 @@ qa_fast_atan2f::t2() /* Test x as INF */ x = inf; y = 0; - c_atan2 = atan2(x, y); - gr_atan2f = gr::fast_atan2f(x, y); - CPPUNIT_ASSERT_DOUBLES_EQUAL(c_atan2, gr_atan2f, 0.0001); + c_atan2 = atan2(y, x); + gr_atan2f = gr::fast_atan2f(y, x); + CPPUNIT_ASSERT_DOUBLES_EQUAL(c_atan2, gr_atan2f, 0.00083); x = -inf; y = 0; - c_atan2 = atan2(x, y); - gr_atan2f = gr::fast_atan2f(x, y); - CPPUNIT_ASSERT_DOUBLES_EQUAL(c_atan2, gr_atan2f, 0.0001); + c_atan2 = atan2(y, x); + gr_atan2f = gr::fast_atan2f(y, x); + CPPUNIT_ASSERT_DOUBLES_EQUAL(c_atan2, gr_atan2f, 0.00083); /* Test y as INF */ x = 0; y = inf; - c_atan2 = atan2(x, y); - gr_atan2f = gr::fast_atan2f(x, y); - CPPUNIT_ASSERT_DOUBLES_EQUAL(c_atan2, gr_atan2f, 0.0001); + c_atan2 = atan2(y, x); + gr_atan2f = gr::fast_atan2f(y, x); + CPPUNIT_ASSERT_DOUBLES_EQUAL(c_atan2, gr_atan2f, 0.00083); x = 0; y = -inf; - c_atan2 = atan2(x, y); - gr_atan2f = gr::fast_atan2f(x, y); - CPPUNIT_ASSERT_DOUBLES_EQUAL(c_atan2, gr_atan2f, 0.0001); + c_atan2 = atan2(y, x); + gr_atan2f = gr::fast_atan2f(y, x); + CPPUNIT_ASSERT_DOUBLES_EQUAL(c_atan2, gr_atan2f, 0.00083); /* Test x and y as INF */ x = inf; y = inf; - gr_atan2f = gr::fast_atan2f(x, y); + gr_atan2f = gr::fast_atan2f(y, x); CPPUNIT_ASSERT(isnan(gr_atan2f)); /* Test x as NAN */ x = nan; y = 0; - gr_atan2f = gr::fast_atan2f(x, y); - CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0f, gr_atan2f, 0.0001); + c_atan2 = atan2(y, x); + gr_atan2f = gr::fast_atan2f(y, x); + CPPUNIT_ASSERT(isnan(gr_atan2f)); x = -nan; y = 0; - gr_atan2f = gr::fast_atan2f(x, y); - CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0f, gr_atan2f, 0.0001); + c_atan2 = atan2(y, x); + gr_atan2f = gr::fast_atan2f(y, x); + CPPUNIT_ASSERT(isnan(gr_atan2f)); /* Test y as NAN */ x = 0; y = nan; - gr_atan2f = gr::fast_atan2f(x, y); - CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0f, gr_atan2f, 0.0001); + c_atan2 = atan2(y, x); + gr_atan2f = gr::fast_atan2f(y, x); + CPPUNIT_ASSERT(isnan(gr_atan2f)); x = 0; y = -nan; - gr_atan2f = gr::fast_atan2f(x, y); - CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0f, gr_atan2f, 0.0001); + c_atan2 = atan2(y, x); + gr_atan2f = gr::fast_atan2f(y, x); + CPPUNIT_ASSERT(isnan(gr_atan2f)); /* Test mixed NAN and INF */ x = inf; y = nan; - gr_atan2f = gr::fast_atan2f(x, y); + gr_atan2f = gr::fast_atan2f(y, x); CPPUNIT_ASSERT(isnan(gr_atan2f)); x = nan; y = inf; - gr_atan2f = gr::fast_atan2f(x, y); + gr_atan2f = gr::fast_atan2f(y, x); CPPUNIT_ASSERT(isnan(gr_atan2f)); } |