\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.006124725233072906597672755451758607334 \cdot 10^{153}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le 5.668416736491797065158030167390678793472 \cdot 10^{-35}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{a \cdot 2} - \frac{b}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} \cdot -1\\
\end{array}double f(double a, double b, double c) {
double r6107739 = b;
double r6107740 = -r6107739;
double r6107741 = r6107739 * r6107739;
double r6107742 = 4.0;
double r6107743 = a;
double r6107744 = r6107742 * r6107743;
double r6107745 = c;
double r6107746 = r6107744 * r6107745;
double r6107747 = r6107741 - r6107746;
double r6107748 = sqrt(r6107747);
double r6107749 = r6107740 + r6107748;
double r6107750 = 2.0;
double r6107751 = r6107750 * r6107743;
double r6107752 = r6107749 / r6107751;
return r6107752;
}
double f(double a, double b, double c) {
double r6107753 = b;
double r6107754 = -1.0061247252330729e+153;
bool r6107755 = r6107753 <= r6107754;
double r6107756 = c;
double r6107757 = r6107756 / r6107753;
double r6107758 = a;
double r6107759 = r6107753 / r6107758;
double r6107760 = r6107757 - r6107759;
double r6107761 = 1.0;
double r6107762 = r6107760 * r6107761;
double r6107763 = 5.668416736491797e-35;
bool r6107764 = r6107753 <= r6107763;
double r6107765 = r6107753 * r6107753;
double r6107766 = 4.0;
double r6107767 = r6107758 * r6107756;
double r6107768 = r6107766 * r6107767;
double r6107769 = r6107765 - r6107768;
double r6107770 = sqrt(r6107769);
double r6107771 = 2.0;
double r6107772 = r6107758 * r6107771;
double r6107773 = r6107770 / r6107772;
double r6107774 = r6107753 / r6107772;
double r6107775 = r6107773 - r6107774;
double r6107776 = -1.0;
double r6107777 = r6107757 * r6107776;
double r6107778 = r6107764 ? r6107775 : r6107777;
double r6107779 = r6107755 ? r6107762 : r6107778;
return r6107779;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 21.1 |
| Herbie | 10.2 |
if b < -1.0061247252330729e+153Initial program 63.7
rmApplied div-inv63.7
Taylor expanded around -inf 2.0
Simplified2.0
if -1.0061247252330729e+153 < b < 5.668416736491797e-35Initial program 13.9
rmApplied clear-num14.1
Simplified14.1
rmApplied *-un-lft-identity14.1
Applied add-cube-cbrt14.1
Applied times-frac14.1
Simplified14.1
Simplified13.9
rmApplied div-sub14.0
if 5.668416736491797e-35 < b Initial program 54.6
Taylor expanded around inf 7.2
Final simplification10.2
herbie shell --seed 2019169 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))