\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.8260933955440565 \cdot 10^{-16}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le -1.0403213044374248 \cdot 10^{-202}:\\
\;\;\;\;\frac{c}{\frac{2 \cdot a}{\frac{a \cdot 4}{\sqrt{b \cdot b - \left(a \cdot 4\right) \cdot c} - b}}}\\
\mathbf{elif}\;b \le 4.738941069295542 \cdot 10^{+124}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r4361757 = b;
double r4361758 = -r4361757;
double r4361759 = r4361757 * r4361757;
double r4361760 = 4.0;
double r4361761 = a;
double r4361762 = c;
double r4361763 = r4361761 * r4361762;
double r4361764 = r4361760 * r4361763;
double r4361765 = r4361759 - r4361764;
double r4361766 = sqrt(r4361765);
double r4361767 = r4361758 - r4361766;
double r4361768 = 2.0;
double r4361769 = r4361768 * r4361761;
double r4361770 = r4361767 / r4361769;
return r4361770;
}
double f(double a, double b, double c) {
double r4361771 = b;
double r4361772 = -3.8260933955440565e-16;
bool r4361773 = r4361771 <= r4361772;
double r4361774 = c;
double r4361775 = r4361774 / r4361771;
double r4361776 = -r4361775;
double r4361777 = -1.0403213044374248e-202;
bool r4361778 = r4361771 <= r4361777;
double r4361779 = 2.0;
double r4361780 = a;
double r4361781 = r4361779 * r4361780;
double r4361782 = 4.0;
double r4361783 = r4361780 * r4361782;
double r4361784 = r4361771 * r4361771;
double r4361785 = r4361783 * r4361774;
double r4361786 = r4361784 - r4361785;
double r4361787 = sqrt(r4361786);
double r4361788 = r4361787 - r4361771;
double r4361789 = r4361783 / r4361788;
double r4361790 = r4361781 / r4361789;
double r4361791 = r4361774 / r4361790;
double r4361792 = 4.738941069295542e+124;
bool r4361793 = r4361771 <= r4361792;
double r4361794 = -r4361771;
double r4361795 = r4361774 * r4361780;
double r4361796 = r4361782 * r4361795;
double r4361797 = r4361784 - r4361796;
double r4361798 = sqrt(r4361797);
double r4361799 = r4361794 - r4361798;
double r4361800 = r4361799 / r4361781;
double r4361801 = r4361771 / r4361780;
double r4361802 = r4361775 - r4361801;
double r4361803 = r4361793 ? r4361800 : r4361802;
double r4361804 = r4361778 ? r4361791 : r4361803;
double r4361805 = r4361773 ? r4361776 : r4361804;
return r4361805;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.6 |
|---|---|
| Target | 20.8 |
| Herbie | 7.8 |
if b < -3.8260933955440565e-16Initial program 54.0
Taylor expanded around -inf 6.5
Simplified6.5
if -3.8260933955440565e-16 < b < -1.0403213044374248e-202Initial program 28.6
rmApplied add-sqr-sqrt28.6
Applied sqrt-prod28.9
rmApplied flip--29.0
Simplified17.7
Simplified17.5
rmApplied *-un-lft-identity17.5
Applied times-frac13.0
Applied associate-/l*7.9
if -1.0403213044374248e-202 < b < 4.738941069295542e+124Initial program 10.6
if 4.738941069295542e+124 < b Initial program 50.6
Taylor expanded around inf 2.9
Final simplification7.8
herbie shell --seed 2019162
(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)))