\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\left(4 \cdot a\right) \cdot \frac{c}{\left(-b\right) - \sqrt{\frac{{b}^{6} - {\left(\left(4 \cdot a\right) \cdot c\right)}^{3}}{{b}^{4} + 4 \cdot \left(\left(a \cdot c\right) \cdot \left(\left(4 \cdot a\right) \cdot c + b \cdot b\right)\right)}}}}{a \cdot 2}(FPCore (a b c) :precision binary64 (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))
(FPCore (a b c)
:precision binary64
(/
(*
(* 4.0 a)
(/
c
(-
(- b)
(sqrt
(/
(- (pow b 6.0) (pow (* (* 4.0 a) c) 3.0))
(+ (pow b 4.0) (* 4.0 (* (* a c) (+ (* (* 4.0 a) c) (* b b))))))))))
(* a 2.0)))double code(double a, double b, double c) {
return (-b + sqrt((b * b) - ((4.0 * a) * c))) / (2.0 * a);
}
double code(double a, double b, double c) {
return ((4.0 * a) * (c / (-b - sqrt((pow(b, 6.0) - pow(((4.0 * a) * c), 3.0)) / (pow(b, 4.0) + (4.0 * ((a * c) * (((4.0 * a) * c) + (b * b))))))))) / (a * 2.0);
}





Bits error versus a





Bits error versus b





Bits error versus c
Results
| Alternative 1 | |
|---|---|
| Accuracy | 0.2 |
| Cost | 4928 |
| Alternative 2 | |
|---|---|
| Accuracy | 0.4 |
| Cost | 1472 |
Initial program 52.4
rmApplied flip-+_binary64_5252.4
Simplified0.4
rmApplied *-un-lft-identity_binary64_780.4
Applied times-frac_binary64_840.2
Simplified0.2
Simplified0.2
rmApplied flip3--_binary64_820.2
Simplified0.2
Simplified0.2
rmApplied *-un-lft-identity_binary64_780.2
Final simplification0.2
herbie shell --seed 2020322
(FPCore (a b c)
:name "Quadratic roots, wide range"
:precision binary64
:pre (and (< 4.930380657631324e-32 a 2.028240960365167e+31) (< 4.930380657631324e-32 b 2.028240960365167e+31) (< 4.930380657631324e-32 c 2.028240960365167e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))