diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2014-02-03 12:14:44 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2014-02-03 13:17:29 -0500 |
commit | 577d01982080e181edeba5172d5a7e007170f4e3 (patch) | |
tree | da53b8e4d57c6524f57bfee0238ee7c8e4aadcb0 /libdimension/polynomial.c | |
parent | b1fccd03798da1930755557cb4516526cc09bb15 (diff) | |
download | dimension-577d01982080e181edeba5172d5a7e007170f4e3.tar.xz |
Fix a bug in cubic polynomial solver, and add more tests.
Diffstat (limited to 'libdimension/polynomial.c')
-rw-r--r-- | libdimension/polynomial.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/libdimension/polynomial.c b/libdimension/polynomial.c index 9491861..3f64091 100644 --- a/libdimension/polynomial.c +++ b/libdimension/polynomial.c @@ -358,9 +358,9 @@ dmnsn_solve_cubic(double poly[4], double x[3]) x[0] = -bdiv3; } else { /* Two real roots; one duplicate */ - double t1 = 3.0*q/p, t2 = -t1/2.0; - x[0] = dmnsn_max(t1, t2); - x[1] = dmnsn_min(t1, t2); + double t1 = -(3.0*q)/(2.0*p), t2 = -2.0*t1; + x[0] = dmnsn_max(t1, t2) - bdiv3; + x[1] = dmnsn_min(t1, t2) - bdiv3; if (x[1] >= dmnsn_epsilon) return 2; } |