From 13188ca83cb2a66c6cb47a4746a05bb59b19c562 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Thu, 22 Jan 2015 00:27:10 +1100 Subject: [PATCH] polynomial: remove some useless maths operations --- polynomial.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/polynomial.cpp b/polynomial.cpp index 7b1231d0..a556a427 100644 --- a/polynomial.cpp +++ b/polynomial.cpp @@ -68,12 +68,12 @@ namespace util { namespace polynomial { namespace util { namespace polynomial { template <> std::array - solve (std::array coeff) + solve (std::array coeffs) { - const float _a = coeff[0]; - const float _b = coeff[1]; - const float _c = coeff[2]; - const float _d = coeff[3]; + const float _a = coeffs[0]; + const float _b = coeffs[1]; + const float _c = coeffs[2]; + const float _d = coeffs[3]; if (almost_zero (_a)) { auto s = solve<3> ({_b, _c, _d}); @@ -92,8 +92,8 @@ namespace util { namespace polynomial { const float c = _d / _a; // Substituate x = y - a / 3 to eliminate the quadric. Now: x^3 + px + q = 0 - float p = (-1 / 3.f * a * a + b) / 3.f; - float q = (2 / 27.f * a * a * a - 1 / 3.f * a * b + c) / 2.f; + float p = (-a * a / 3.f + b) / 3.f; + float q = (2 * a * a * a / 27.f - a * b /3.f + c) / 2.f; // Solve using Cardano's method float D = q * q + p * p * p; @@ -108,7 +108,7 @@ namespace util { namespace polynomial { s[1] = -u; } } else if (D < 0) { - float phi = 1 / 3.f * std::acos (-q / std::sqrt (-p * p * p)); + float phi = std::acos (-q / std::sqrt (-p * p * p)) / 3.f; float t = 2 * std::sqrt (-p); s[0] = t * std::cos (phi);