\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 -9.44750035307145 \cdot 10^{+99}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le -9.715316061514381 \cdot 10^{-195}:\\
\;\;\;\;-\frac{\frac{\frac{a \cdot c}{\frac{-1}{2}}}{a}}{\left(-b\right) + \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}\\
\mathbf{elif}\;b \le 4.716596953029048 \cdot 10^{+90}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r22212642 = b;
double r22212643 = -r22212642;
double r22212644 = r22212642 * r22212642;
double r22212645 = 4.0;
double r22212646 = a;
double r22212647 = c;
double r22212648 = r22212646 * r22212647;
double r22212649 = r22212645 * r22212648;
double r22212650 = r22212644 - r22212649;
double r22212651 = sqrt(r22212650);
double r22212652 = r22212643 - r22212651;
double r22212653 = 2.0;
double r22212654 = r22212653 * r22212646;
double r22212655 = r22212652 / r22212654;
return r22212655;
}
double f(double a, double b, double c) {
double r22212656 = b;
double r22212657 = -9.44750035307145e+99;
bool r22212658 = r22212656 <= r22212657;
double r22212659 = c;
double r22212660 = r22212659 / r22212656;
double r22212661 = -r22212660;
double r22212662 = -9.715316061514381e-195;
bool r22212663 = r22212656 <= r22212662;
double r22212664 = a;
double r22212665 = r22212664 * r22212659;
double r22212666 = -0.5;
double r22212667 = r22212665 / r22212666;
double r22212668 = r22212667 / r22212664;
double r22212669 = -r22212656;
double r22212670 = r22212656 * r22212656;
double r22212671 = 4.0;
double r22212672 = r22212665 * r22212671;
double r22212673 = r22212670 - r22212672;
double r22212674 = sqrt(r22212673);
double r22212675 = r22212669 + r22212674;
double r22212676 = r22212668 / r22212675;
double r22212677 = -r22212676;
double r22212678 = 4.716596953029048e+90;
bool r22212679 = r22212656 <= r22212678;
double r22212680 = r22212669 - r22212674;
double r22212681 = 2.0;
double r22212682 = r22212664 * r22212681;
double r22212683 = r22212680 / r22212682;
double r22212684 = r22212656 / r22212664;
double r22212685 = r22212660 - r22212684;
double r22212686 = r22212679 ? r22212683 : r22212685;
double r22212687 = r22212663 ? r22212677 : r22212686;
double r22212688 = r22212658 ? r22212661 : r22212687;
return r22212688;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.2 |
|---|---|
| Target | 20.1 |
| Herbie | 8.9 |
if b < -9.44750035307145e+99Initial program 58.3
rmApplied div-inv58.3
Taylor expanded around -inf 2.1
Simplified2.1
if -9.44750035307145e+99 < b < -9.715316061514381e-195Initial program 37.2
rmApplied div-inv37.3
rmApplied flip--37.4
Applied associate-*l/37.4
Simplified15.3
if -9.715316061514381e-195 < b < 4.716596953029048e+90Initial program 11.0
rmApplied div-inv11.2
rmApplied un-div-inv11.0
if 4.716596953029048e+90 < b Initial program 42.2
rmApplied div-inv42.3
Taylor expanded around inf 3.8
Final simplification8.9
herbie shell --seed 2019112 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 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)))