\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.457738542065716919858398723449020930628 \cdot 10^{153}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -2.695863739873928877277501764874065503226 \cdot 10^{-295}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}\\
\mathbf{elif}\;b \le 1.191203142513164639216663918436976252985 \cdot 10^{117}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r99428 = b;
double r99429 = -r99428;
double r99430 = r99428 * r99428;
double r99431 = 4.0;
double r99432 = a;
double r99433 = c;
double r99434 = r99432 * r99433;
double r99435 = r99431 * r99434;
double r99436 = r99430 - r99435;
double r99437 = sqrt(r99436);
double r99438 = r99429 - r99437;
double r99439 = 2.0;
double r99440 = r99439 * r99432;
double r99441 = r99438 / r99440;
return r99441;
}
double f(double a, double b, double c) {
double r99442 = b;
double r99443 = -1.457738542065717e+153;
bool r99444 = r99442 <= r99443;
double r99445 = -1.0;
double r99446 = c;
double r99447 = r99446 / r99442;
double r99448 = r99445 * r99447;
double r99449 = -2.695863739873929e-295;
bool r99450 = r99442 <= r99449;
double r99451 = 2.0;
double r99452 = r99451 * r99446;
double r99453 = r99442 * r99442;
double r99454 = 4.0;
double r99455 = a;
double r99456 = r99455 * r99446;
double r99457 = r99454 * r99456;
double r99458 = r99453 - r99457;
double r99459 = sqrt(r99458);
double r99460 = r99459 - r99442;
double r99461 = r99452 / r99460;
double r99462 = 1.1912031425131646e+117;
bool r99463 = r99442 <= r99462;
double r99464 = 1.0;
double r99465 = r99451 * r99455;
double r99466 = -r99442;
double r99467 = r99466 - r99459;
double r99468 = r99465 / r99467;
double r99469 = r99464 / r99468;
double r99470 = r99442 / r99455;
double r99471 = r99445 * r99470;
double r99472 = r99463 ? r99469 : r99471;
double r99473 = r99450 ? r99461 : r99472;
double r99474 = r99444 ? r99448 : r99473;
return r99474;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.4 |
|---|---|
| Target | 21.2 |
| Herbie | 7.0 |
if b < -1.457738542065717e+153Initial program 63.9
Taylor expanded around -inf 1.3
if -1.457738542065717e+153 < b < -2.695863739873929e-295Initial program 35.5
rmApplied flip--35.5
Simplified16.5
Simplified16.5
rmApplied div-inv16.6
rmApplied associate-*l/15.1
Simplified15.0
Taylor expanded around 0 8.3
if -2.695863739873929e-295 < b < 1.1912031425131646e+117Initial program 9.8
rmApplied clear-num9.9
if 1.1912031425131646e+117 < b Initial program 50.7
rmApplied flip--63.7
Simplified62.7
Simplified62.7
Taylor expanded around 0 4.0
Final simplification7.0
herbie shell --seed 2019351
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))