\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 -4.4270058556435274 \cdot 10^{-117}:\\
\;\;\;\;1 \cdot \left(-1 \cdot \frac{c}{b}\right)\\
\mathbf{elif}\;b \le 2.49922826628406174 \cdot 10^{84}:\\
\;\;\;\;\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\right)\\
\end{array}double f(double a, double b, double c) {
double r77740 = b;
double r77741 = -r77740;
double r77742 = r77740 * r77740;
double r77743 = 4.0;
double r77744 = a;
double r77745 = c;
double r77746 = r77744 * r77745;
double r77747 = r77743 * r77746;
double r77748 = r77742 - r77747;
double r77749 = sqrt(r77748);
double r77750 = r77741 - r77749;
double r77751 = 2.0;
double r77752 = r77751 * r77744;
double r77753 = r77750 / r77752;
return r77753;
}
double f(double a, double b, double c) {
double r77754 = b;
double r77755 = -4.4270058556435274e-117;
bool r77756 = r77754 <= r77755;
double r77757 = 1.0;
double r77758 = -1.0;
double r77759 = c;
double r77760 = r77759 / r77754;
double r77761 = r77758 * r77760;
double r77762 = r77757 * r77761;
double r77763 = 2.4992282662840617e+84;
bool r77764 = r77754 <= r77763;
double r77765 = cbrt(r77757);
double r77766 = r77765 * r77765;
double r77767 = 2.0;
double r77768 = a;
double r77769 = r77767 * r77768;
double r77770 = -r77754;
double r77771 = r77754 * r77754;
double r77772 = 4.0;
double r77773 = r77768 * r77759;
double r77774 = r77772 * r77773;
double r77775 = r77771 - r77774;
double r77776 = sqrt(r77775);
double r77777 = r77770 - r77776;
double r77778 = r77769 / r77777;
double r77779 = r77766 / r77778;
double r77780 = 1.0;
double r77781 = r77754 / r77768;
double r77782 = r77760 - r77781;
double r77783 = r77780 * r77782;
double r77784 = r77757 * r77783;
double r77785 = r77764 ? r77779 : r77784;
double r77786 = r77756 ? r77762 : r77785;
return r77786;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 21.2 |
| Herbie | 10.5 |
if b < -4.4270058556435274e-117Initial program 51.5
rmApplied clear-num51.5
rmApplied *-un-lft-identity51.5
Applied add-cube-cbrt51.5
Applied times-frac51.5
Simplified51.5
Simplified51.5
Taylor expanded around -inf 11.1
if -4.4270058556435274e-117 < b < 2.4992282662840617e+84Initial program 12.4
rmApplied clear-num12.5
rmApplied add-cube-cbrt12.5
Applied associate-/l*12.5
Simplified12.5
if 2.4992282662840617e+84 < b Initial program 43.2
rmApplied clear-num43.2
rmApplied *-un-lft-identity43.2
Applied add-cube-cbrt43.2
Applied times-frac43.2
Simplified43.2
Simplified43.2
Taylor expanded around inf 4.1
Simplified4.1
Final simplification10.5
herbie shell --seed 2020056 +o rules:numerics
(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)))