double f(double a, double b, double c) {
double r12254868 = b;
double r12254869 = -r12254868;
double r12254870 = r12254868 * r12254868;
double r12254871 = 4.0;
double r12254872 = a;
double r12254873 = c;
double r12254874 = r12254872 * r12254873;
double r12254875 = r12254871 * r12254874;
double r12254876 = r12254870 - r12254875;
double r12254877 = sqrt(r12254876);
double r12254878 = r12254869 - r12254877;
double r12254879 = 2.0;
double r12254880 = r12254879 * r12254872;
double r12254881 = r12254878 / r12254880;
return r12254881;
}
double f(double a, double b, double c) {
double r12254882 = b;
double r12254883 = -9.238052366259206e-38;
bool r12254884 = r12254882 <= r12254883;
double r12254885 = c;
double r12254886 = r12254885 / r12254882;
double r12254887 = -r12254886;
double r12254888 = 2.7654658503846575e+109;
bool r12254889 = r12254882 <= r12254888;
double r12254890 = -0.5;
double r12254891 = a;
double r12254892 = r12254890 / r12254891;
double r12254893 = -4.0;
double r12254894 = r12254885 * r12254893;
double r12254895 = r12254882 * r12254882;
double r12254896 = fma(r12254891, r12254894, r12254895);
double r12254897 = sqrt(r12254896);
double r12254898 = r12254897 + r12254882;
double r12254899 = r12254892 * r12254898;
double r12254900 = r12254882 / r12254891;
double r12254901 = -r12254900;
double r12254902 = r12254889 ? r12254899 : r12254901;
double r12254903 = r12254884 ? r12254887 : r12254902;
return r12254903;
}
\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.238052366259206 \cdot 10^{-38}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 2.7654658503846575 \cdot 10^{+109}:\\
\;\;\;\;\frac{\frac{-1}{2}}{a} \cdot \left(\sqrt{(a \cdot \left(c \cdot -4\right) + \left(b \cdot b\right))_*} + b\right)\\
\mathbf{else}:\\
\;\;\;\;-\frac{b}{a}\\
\end{array}



Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.5 |
|---|---|
| Target | 20.8 |
| Herbie | 10.3 |
if b < -9.238052366259206e-38Initial program 53.5
Simplified53.5
rmApplied *-un-lft-identity53.5
Applied div-inv53.5
Applied times-frac53.5
Simplified53.5
Simplified53.5
Taylor expanded around -inf 7.8
Simplified7.8
if -9.238052366259206e-38 < b < 2.7654658503846575e+109Initial program 14.2
Simplified14.2
rmApplied *-un-lft-identity14.2
Applied div-inv14.2
Applied times-frac14.3
Simplified14.4
Simplified14.4
if 2.7654658503846575e+109 < b Initial program 47.4
Simplified47.4
rmApplied *-un-lft-identity47.4
Applied *-un-lft-identity47.4
Applied *-un-lft-identity47.4
Applied distribute-rgt-neg-in47.4
Applied distribute-lft-out--47.4
Applied times-frac47.4
Applied associate-/l*47.5
Simplified47.5
Taylor expanded around 0 3.4
Simplified3.4
Final simplification10.3
herbie shell --seed 2019102 +o rules:numerics
(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)))