\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 -1.5961406266953245 \cdot 10^{-58}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 3.1115579814291686 \cdot 10^{+29}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-b}{a}\\
\end{array}double f(double a, double b, double c) {
double r2785871 = b;
double r2785872 = -r2785871;
double r2785873 = r2785871 * r2785871;
double r2785874 = 4.0;
double r2785875 = a;
double r2785876 = c;
double r2785877 = r2785875 * r2785876;
double r2785878 = r2785874 * r2785877;
double r2785879 = r2785873 - r2785878;
double r2785880 = sqrt(r2785879);
double r2785881 = r2785872 - r2785880;
double r2785882 = 2.0;
double r2785883 = r2785882 * r2785875;
double r2785884 = r2785881 / r2785883;
return r2785884;
}
double f(double a, double b, double c) {
double r2785885 = b;
double r2785886 = -1.5961406266953245e-58;
bool r2785887 = r2785885 <= r2785886;
double r2785888 = c;
double r2785889 = r2785888 / r2785885;
double r2785890 = -r2785889;
double r2785891 = 3.1115579814291686e+29;
bool r2785892 = r2785885 <= r2785891;
double r2785893 = 1.0;
double r2785894 = 2.0;
double r2785895 = a;
double r2785896 = r2785894 * r2785895;
double r2785897 = -r2785885;
double r2785898 = r2785885 * r2785885;
double r2785899 = r2785895 * r2785888;
double r2785900 = 4.0;
double r2785901 = r2785899 * r2785900;
double r2785902 = r2785898 - r2785901;
double r2785903 = sqrt(r2785902);
double r2785904 = r2785897 - r2785903;
double r2785905 = r2785896 / r2785904;
double r2785906 = r2785893 / r2785905;
double r2785907 = r2785897 / r2785895;
double r2785908 = r2785892 ? r2785906 : r2785907;
double r2785909 = r2785887 ? r2785890 : r2785908;
return r2785909;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 20.6 |
| Herbie | 10.5 |
if b < -1.5961406266953245e-58Initial program 53.4
Taylor expanded around -inf 8.1
Simplified8.1
if -1.5961406266953245e-58 < b < 3.1115579814291686e+29Initial program 14.7
rmApplied clear-num14.9
if 3.1115579814291686e+29 < b Initial program 34.4
rmApplied clear-num34.5
Taylor expanded around 0 6.5
Simplified6.5
Final simplification10.5
herbie shell --seed 2019134 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))