\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 -6.376253530740768 \cdot 10^{+152}:\\
\;\;\;\;\frac{\left(a \cdot \frac{c}{b} - b\right) \cdot 2}{2 \cdot a}\\
\mathbf{elif}\;b \le 3.2059736638617364 \cdot 10^{-150}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{a}\\
\mathbf{elif}\;b \le 8.834167001137509 \cdot 10^{-10}:\\
\;\;\;\;\frac{4 \cdot \left(a \cdot c\right)}{\frac{a}{\frac{1}{2}}} \cdot \frac{-1}{b + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-c}{b}\\
\end{array}double f(double a, double b, double c) {
double r9242851 = b;
double r9242852 = -r9242851;
double r9242853 = r9242851 * r9242851;
double r9242854 = 4.0;
double r9242855 = a;
double r9242856 = r9242854 * r9242855;
double r9242857 = c;
double r9242858 = r9242856 * r9242857;
double r9242859 = r9242853 - r9242858;
double r9242860 = sqrt(r9242859);
double r9242861 = r9242852 + r9242860;
double r9242862 = 2.0;
double r9242863 = r9242862 * r9242855;
double r9242864 = r9242861 / r9242863;
return r9242864;
}
double f(double a, double b, double c) {
double r9242865 = b;
double r9242866 = -6.376253530740768e+152;
bool r9242867 = r9242865 <= r9242866;
double r9242868 = a;
double r9242869 = c;
double r9242870 = r9242869 / r9242865;
double r9242871 = r9242868 * r9242870;
double r9242872 = r9242871 - r9242865;
double r9242873 = 2.0;
double r9242874 = r9242872 * r9242873;
double r9242875 = r9242873 * r9242868;
double r9242876 = r9242874 / r9242875;
double r9242877 = 3.2059736638617364e-150;
bool r9242878 = r9242865 <= r9242877;
double r9242879 = 0.5;
double r9242880 = r9242865 * r9242865;
double r9242881 = 4.0;
double r9242882 = r9242868 * r9242869;
double r9242883 = r9242881 * r9242882;
double r9242884 = r9242880 - r9242883;
double r9242885 = sqrt(r9242884);
double r9242886 = r9242885 - r9242865;
double r9242887 = r9242886 / r9242868;
double r9242888 = r9242879 * r9242887;
double r9242889 = 8.834167001137509e-10;
bool r9242890 = r9242865 <= r9242889;
double r9242891 = r9242868 / r9242879;
double r9242892 = r9242883 / r9242891;
double r9242893 = -1.0;
double r9242894 = r9242865 + r9242885;
double r9242895 = r9242893 / r9242894;
double r9242896 = r9242892 * r9242895;
double r9242897 = -r9242869;
double r9242898 = r9242897 / r9242865;
double r9242899 = r9242890 ? r9242896 : r9242898;
double r9242900 = r9242878 ? r9242888 : r9242899;
double r9242901 = r9242867 ? r9242876 : r9242900;
return r9242901;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.5 |
|---|---|
| Target | 20.4 |
| Herbie | 8.7 |
if b < -6.376253530740768e+152Initial program 60.5
Simplified60.5
Taylor expanded around -inf 12.3
Simplified2.0
if -6.376253530740768e+152 < b < 3.2059736638617364e-150Initial program 10.4
Simplified10.4
rmApplied clear-num10.6
rmApplied *-un-lft-identity10.6
Applied times-frac10.6
Applied add-sqr-sqrt10.6
Applied times-frac10.6
Simplified10.6
Simplified10.4
if 3.2059736638617364e-150 < b < 8.834167001137509e-10Initial program 32.0
Simplified32.0
rmApplied clear-num32.1
rmApplied flip--32.2
Applied associate-/r/32.2
Applied *-un-lft-identity32.2
Applied times-frac32.3
Simplified16.5
if 8.834167001137509e-10 < b Initial program 54.0
Simplified54.0
Taylor expanded around inf 6.2
Simplified6.2
Final simplification8.7
herbie shell --seed 2019104
(FPCore (a b c)
:name "The quadratic formula (r1)"
: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)))