\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 -8.635925081143504476780080161813975782827 \cdot 10^{-66}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 3.206904744652339671334892722279467095293 \cdot 10^{101}:\\
\;\;\;\;\frac{-\left(\sqrt{b \cdot b - \left(c \cdot 4\right) \cdot a} + b\right)}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\end{array}double f(double a, double b, double c) {
double r2819894 = b;
double r2819895 = -r2819894;
double r2819896 = r2819894 * r2819894;
double r2819897 = 4.0;
double r2819898 = a;
double r2819899 = c;
double r2819900 = r2819898 * r2819899;
double r2819901 = r2819897 * r2819900;
double r2819902 = r2819896 - r2819901;
double r2819903 = sqrt(r2819902);
double r2819904 = r2819895 - r2819903;
double r2819905 = 2.0;
double r2819906 = r2819905 * r2819898;
double r2819907 = r2819904 / r2819906;
return r2819907;
}
double f(double a, double b, double c) {
double r2819908 = b;
double r2819909 = -8.635925081143504e-66;
bool r2819910 = r2819908 <= r2819909;
double r2819911 = -1.0;
double r2819912 = c;
double r2819913 = r2819912 / r2819908;
double r2819914 = r2819911 * r2819913;
double r2819915 = 3.2069047446523397e+101;
bool r2819916 = r2819908 <= r2819915;
double r2819917 = r2819908 * r2819908;
double r2819918 = 4.0;
double r2819919 = r2819912 * r2819918;
double r2819920 = a;
double r2819921 = r2819919 * r2819920;
double r2819922 = r2819917 - r2819921;
double r2819923 = sqrt(r2819922);
double r2819924 = r2819923 + r2819908;
double r2819925 = -r2819924;
double r2819926 = 2.0;
double r2819927 = r2819926 * r2819920;
double r2819928 = r2819925 / r2819927;
double r2819929 = r2819908 / r2819920;
double r2819930 = r2819913 - r2819929;
double r2819931 = 1.0;
double r2819932 = r2819930 * r2819931;
double r2819933 = r2819916 ? r2819928 : r2819932;
double r2819934 = r2819910 ? r2819914 : r2819933;
return r2819934;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.4 |
|---|---|
| Target | 20.9 |
| Herbie | 10.1 |
if b < -8.635925081143504e-66Initial program 53.4
Taylor expanded around -inf 8.4
if -8.635925081143504e-66 < b < 3.2069047446523397e+101Initial program 13.4
rmApplied div-inv13.5
rmApplied associate-*r/13.4
Simplified13.5
if 3.2069047446523397e+101 < b Initial program 46.8
rmApplied div-inv46.8
rmApplied associate-*r/46.8
Simplified46.8
Taylor expanded around inf 4.4
Simplified4.4
Final simplification10.1
herbie shell --seed 2019172 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))