\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 -3.8424248185280593 \cdot 10^{-34}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 9.6230204738986831 \cdot 10^{86}:\\
\;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r99570 = b;
double r99571 = -r99570;
double r99572 = r99570 * r99570;
double r99573 = 4.0;
double r99574 = a;
double r99575 = c;
double r99576 = r99574 * r99575;
double r99577 = r99573 * r99576;
double r99578 = r99572 - r99577;
double r99579 = sqrt(r99578);
double r99580 = r99571 - r99579;
double r99581 = 2.0;
double r99582 = r99581 * r99574;
double r99583 = r99580 / r99582;
return r99583;
}
double f(double a, double b, double c) {
double r99584 = b;
double r99585 = -3.8424248185280593e-34;
bool r99586 = r99584 <= r99585;
double r99587 = -1.0;
double r99588 = c;
double r99589 = r99588 / r99584;
double r99590 = r99587 * r99589;
double r99591 = 9.623020473898683e+86;
bool r99592 = r99584 <= r99591;
double r99593 = -r99584;
double r99594 = r99584 * r99584;
double r99595 = 4.0;
double r99596 = a;
double r99597 = r99596 * r99588;
double r99598 = r99595 * r99597;
double r99599 = r99594 - r99598;
double r99600 = sqrt(r99599);
double r99601 = r99593 - r99600;
double r99602 = 1.0;
double r99603 = 2.0;
double r99604 = r99603 * r99596;
double r99605 = r99602 / r99604;
double r99606 = r99601 * r99605;
double r99607 = r99584 / r99596;
double r99608 = r99587 * r99607;
double r99609 = r99592 ? r99606 : r99608;
double r99610 = r99586 ? r99590 : r99609;
return r99610;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 21.0 |
| Herbie | 9.9 |
if b < -3.8424248185280593e-34Initial program 54.2
Taylor expanded around -inf 7.1
if -3.8424248185280593e-34 < b < 9.623020473898683e+86Initial program 13.9
rmApplied div-inv14.0
if 9.623020473898683e+86 < b Initial program 45.6
rmApplied clear-num45.6
Taylor expanded around 0 4.2
Final simplification9.9
herbie shell --seed 2019199 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))