\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.348931433494438 \cdot 10^{+39}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\mathbf{elif}\;b \le 1.3353078790738604 \cdot 10^{-121}:\\
\;\;\;\;\frac{\frac{\sqrt{-4 \cdot \left(a \cdot c\right) + b \cdot b} - b}{a}}{2}\\
\mathbf{elif}\;b \le 1.6168702840263923 \cdot 10^{-79}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\mathbf{elif}\;b \le 1.546013236023957 \cdot 10^{-67}:\\
\;\;\;\;\frac{\frac{\sqrt{-4 \cdot \left(a \cdot c\right) + b \cdot b} - b}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r3629569 = b;
double r3629570 = -r3629569;
double r3629571 = r3629569 * r3629569;
double r3629572 = 4.0;
double r3629573 = a;
double r3629574 = c;
double r3629575 = r3629573 * r3629574;
double r3629576 = r3629572 * r3629575;
double r3629577 = r3629571 - r3629576;
double r3629578 = sqrt(r3629577);
double r3629579 = r3629570 + r3629578;
double r3629580 = 2.0;
double r3629581 = r3629580 * r3629573;
double r3629582 = r3629579 / r3629581;
return r3629582;
}
double f(double a, double b, double c) {
double r3629583 = b;
double r3629584 = -9.348931433494438e+39;
bool r3629585 = r3629583 <= r3629584;
double r3629586 = c;
double r3629587 = r3629586 / r3629583;
double r3629588 = a;
double r3629589 = r3629583 / r3629588;
double r3629590 = r3629587 - r3629589;
double r3629591 = 2.0;
double r3629592 = r3629590 * r3629591;
double r3629593 = r3629592 / r3629591;
double r3629594 = 1.3353078790738604e-121;
bool r3629595 = r3629583 <= r3629594;
double r3629596 = -4.0;
double r3629597 = r3629588 * r3629586;
double r3629598 = r3629596 * r3629597;
double r3629599 = r3629583 * r3629583;
double r3629600 = r3629598 + r3629599;
double r3629601 = sqrt(r3629600);
double r3629602 = r3629601 - r3629583;
double r3629603 = r3629602 / r3629588;
double r3629604 = r3629603 / r3629591;
double r3629605 = 1.6168702840263923e-79;
bool r3629606 = r3629583 <= r3629605;
double r3629607 = -2.0;
double r3629608 = r3629607 * r3629587;
double r3629609 = r3629608 / r3629591;
double r3629610 = 1.546013236023957e-67;
bool r3629611 = r3629583 <= r3629610;
double r3629612 = r3629611 ? r3629604 : r3629609;
double r3629613 = r3629606 ? r3629609 : r3629612;
double r3629614 = r3629595 ? r3629604 : r3629613;
double r3629615 = r3629585 ? r3629593 : r3629614;
return r3629615;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.0 |
|---|---|
| Target | 20.1 |
| Herbie | 10.8 |
if b < -9.348931433494438e+39Initial program 34.0
Simplified34.0
Taylor expanded around -inf 6.2
Simplified6.2
if -9.348931433494438e+39 < b < 1.3353078790738604e-121 or 1.6168702840263923e-79 < b < 1.546013236023957e-67Initial program 12.9
Simplified12.9
rmApplied div-inv13.0
rmApplied associate-*r/12.9
Simplified12.9
if 1.3353078790738604e-121 < b < 1.6168702840263923e-79 or 1.546013236023957e-67 < b Initial program 50.8
Simplified50.8
Taylor expanded around inf 11.2
Final simplification10.8
herbie shell --seed 2019158
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))