diff --git a/bezier3.cpp b/bezier3.cpp index 3e174f2c..0d6bc9ca 100644 --- a/bezier3.cpp +++ b/bezier3.cpp @@ -30,10 +30,10 @@ namespace util { CHECK_GE (t, 0.f); CHECK_LE (t, 1.f); - auto v0 = pow (1 - t, 3u) * m_points[0]; - auto v1 = 3 * pow2 (1 - t) * t * m_points[1]; - auto v2 = 3 * pow2 (1 - t) * t * m_points[2]; - auto v3 = pow (t, 3u) * m_points[3]; + auto v0 = pow (1 - t, 3u) * m_points[0]; + auto v1 = 3 * pow (1 - t, 2u) * t * m_points[1]; + auto v2 = 3 * pow (1 - t, 2u) * t * m_points[2]; + auto v3 = pow (t, 3u) * m_points[3]; return { v0.x + v1.x + v2.x + v3.x, diff --git a/maths.hpp b/maths.hpp index 269bee1d..68c6898d 100644 --- a/maths.hpp +++ b/maths.hpp @@ -207,16 +207,6 @@ namespace util { /////////////////////////////////////////////////////////////////////////// // exponentials - - template - constexpr T - pow2 [[gnu::const]] (T value) - { - return value * value; - } - - - /////////////////////////////////////////////////////////////////////////// template < typename BaseT, typename ExponentT, @@ -229,7 +219,12 @@ namespace util { pow [[gnu::const]] (BaseT base, ExponentT exponent) { assert (exponent >= 0); - return exponent == 0 ? BaseT{1} : base * pow (base, exponent - 1); + + if (exponent == 1) + return base; + if (exponent == 0) + return BaseT{1}; + return base * pow (base, exponent - 1); } diff --git a/point.hpp b/point.hpp index c919afc5..d6568cdb 100644 --- a/point.hpp +++ b/point.hpp @@ -112,7 +112,7 @@ namespace util { constexpr typename std::common_type::type distance2 (point a, point b) { - return sum (pow2 (a - b)); + return sum (pow (a - b, 2)); } /// computes the octile distance between two points. that is, the shortest diff --git a/polynomial.cpp b/polynomial.cpp index 6d8ea501..95612705 100644 --- a/polynomial.cpp +++ b/polynomial.cpp @@ -57,7 +57,7 @@ namespace util::polynomial { return { s[0], std::numeric_limits::quiet_NaN () }; } - auto descriminator = std::sqrt (pow2 (b) - 4 * a * c); + auto descriminator = std::sqrt (pow (b,2) - 4 * a * c); return { (-b - descriminator) / (2 * a), (-b + descriminator) / (2 * a) diff --git a/rand/lcg.cpp b/rand/lcg.cpp index c531c301..382dcefe 100644 --- a/rand/lcg.cpp +++ b/rand/lcg.cpp @@ -87,5 +87,5 @@ lcg::discard (unsigned count) /////////////////////////////////////////////////////////////////////////////// -template struct util::rand::lcg; +template struct util::rand::lcg; template struct util::rand::lcg; diff --git a/test/maths.cpp b/test/maths.cpp index b2e22cbf..7f8485f7 100644 --- a/test/maths.cpp +++ b/test/maths.cpp @@ -166,7 +166,7 @@ main (void) tap.expect_eq (util::digits10( 1), 1, "digits10, 1"); tap.expect_eq (util::digits10(10), 2, "digits10, 10"); - tap.expect_eq (util::pow2 (4u), 16u, "pow2"); + tap.expect_eq (util::pow (4u,2), 16u, "pow2"); static const float POS_ZERO = 1.f / numeric_limits::infinity ();