\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 -7.406397712303184 \cdot 10^{-53}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\mathbf{elif}\;b \le 2.9822108876570007 \cdot 10^{+66}:\\
\;\;\;\;\frac{\left(-\frac{b}{a}\right) - \frac{\sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\left(-b\right) - b}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r1743905 = b;
double r1743906 = -r1743905;
double r1743907 = r1743905 * r1743905;
double r1743908 = 4.0;
double r1743909 = a;
double r1743910 = c;
double r1743911 = r1743909 * r1743910;
double r1743912 = r1743908 * r1743911;
double r1743913 = r1743907 - r1743912;
double r1743914 = sqrt(r1743913);
double r1743915 = r1743906 - r1743914;
double r1743916 = 2.0;
double r1743917 = r1743916 * r1743909;
double r1743918 = r1743915 / r1743917;
return r1743918;
}
double f(double a, double b, double c) {
double r1743919 = b;
double r1743920 = -7.406397712303184e-53;
bool r1743921 = r1743919 <= r1743920;
double r1743922 = -2.0;
double r1743923 = c;
double r1743924 = r1743923 / r1743919;
double r1743925 = r1743922 * r1743924;
double r1743926 = 2.0;
double r1743927 = r1743925 / r1743926;
double r1743928 = 2.9822108876570007e+66;
bool r1743929 = r1743919 <= r1743928;
double r1743930 = a;
double r1743931 = r1743919 / r1743930;
double r1743932 = -r1743931;
double r1743933 = -4.0;
double r1743934 = r1743930 * r1743933;
double r1743935 = r1743919 * r1743919;
double r1743936 = fma(r1743934, r1743923, r1743935);
double r1743937 = sqrt(r1743936);
double r1743938 = r1743937 / r1743930;
double r1743939 = r1743932 - r1743938;
double r1743940 = r1743939 / r1743926;
double r1743941 = -r1743919;
double r1743942 = r1743941 - r1743919;
double r1743943 = r1743942 / r1743930;
double r1743944 = r1743943 / r1743926;
double r1743945 = r1743929 ? r1743940 : r1743944;
double r1743946 = r1743921 ? r1743927 : r1743945;
return r1743946;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.7 |
|---|---|
| Target | 20.7 |
| Herbie | 10.1 |
if b < -7.406397712303184e-53Initial program 53.9
Simplified53.9
Taylor expanded around -inf 7.7
if -7.406397712303184e-53 < b < 2.9822108876570007e+66Initial program 13.9
Simplified13.9
rmApplied div-inv14.0
rmApplied un-div-inv13.9
rmApplied div-sub13.9
if 2.9822108876570007e+66 < b Initial program 38.4
Simplified38.4
Taylor expanded around 0 6.2
Final simplification10.1
herbie shell --seed 2019146 +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)))