From 1fb1d68006b524ba85a5e71e72457369f3d3f26d Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Thu, 18 Nov 2010 01:54:52 -0500 Subject: Compare the cubic discriminant to 0 rather than dmnsn_epsilon. --- libdimension/polynomial.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libdimension/polynomial.c') diff --git a/libdimension/polynomial.c b/libdimension/polynomial.c index 68970ee..09a2bb0 100644 --- a/libdimension/polynomial.c +++ b/libdimension/polynomial.c @@ -359,7 +359,7 @@ dmnsn_solve_cubic(double poly[4], double x[3]) double disc = 4.0*p*p*p + 27.0*q*q; double bdiv3 = poly[2]/3; - if (disc <= -dmnsn_epsilon) { + if (disc < 0.0) { /* Three real roots -- this implies p < 0 */ double msqrtp3 = -sqrt(-p/3.0); double theta = acos(3*q/(2*p*msqrtp3))/3.0; @@ -373,7 +373,7 @@ dmnsn_solve_cubic(double poly[4], double x[3]) return 3; else if (x[1] >= dmnsn_epsilon) return 2; - } else if (disc >= dmnsn_epsilon) { + } else if (disc > 0.0) { /* One real root */ double cbrtdiscq = cbrt(sqrt(disc/108.0) + fabs(q)/2.0); double abst = cbrtdiscq - p/(3.0*cbrtdiscq); -- cgit v1.2.3