\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.668263498157483707441263748528829871939 \cdot 10^{-23}:\\
\;\;\;\;\frac{-1}{1 \cdot \left(\frac{b}{c} - \frac{a}{b}\right)}\\
\mathbf{elif}\;b \le 2.938039658404582626293093928685157937414 \cdot 10^{94}:\\
\;\;\;\;\frac{-1}{\frac{2}{b + \sqrt{\mathsf{fma}\left(c, \left(-a\right) \cdot 4, b \cdot b\right)}} \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\left(-1\right) \cdot \left(\frac{b}{a} - \frac{c}{b}\right)\\
\end{array}double f(double a, double b, double c) {
double r105940 = b;
double r105941 = -r105940;
double r105942 = r105940 * r105940;
double r105943 = 4.0;
double r105944 = a;
double r105945 = c;
double r105946 = r105944 * r105945;
double r105947 = r105943 * r105946;
double r105948 = r105942 - r105947;
double r105949 = sqrt(r105948);
double r105950 = r105941 - r105949;
double r105951 = 2.0;
double r105952 = r105951 * r105944;
double r105953 = r105950 / r105952;
return r105953;
}
double f(double a, double b, double c) {
double r105954 = b;
double r105955 = -7.668263498157484e-23;
bool r105956 = r105954 <= r105955;
double r105957 = -1.0;
double r105958 = 1.0;
double r105959 = c;
double r105960 = r105954 / r105959;
double r105961 = a;
double r105962 = r105961 / r105954;
double r105963 = r105960 - r105962;
double r105964 = r105958 * r105963;
double r105965 = r105957 / r105964;
double r105966 = 2.9380396584045826e+94;
bool r105967 = r105954 <= r105966;
double r105968 = 2.0;
double r105969 = -r105961;
double r105970 = 4.0;
double r105971 = r105969 * r105970;
double r105972 = r105954 * r105954;
double r105973 = fma(r105959, r105971, r105972);
double r105974 = sqrt(r105973);
double r105975 = r105954 + r105974;
double r105976 = r105968 / r105975;
double r105977 = r105976 * r105961;
double r105978 = r105957 / r105977;
double r105979 = -r105958;
double r105980 = r105954 / r105961;
double r105981 = r105959 / r105954;
double r105982 = r105980 - r105981;
double r105983 = r105979 * r105982;
double r105984 = r105967 ? r105978 : r105983;
double r105985 = r105956 ? r105965 : r105984;
return r105985;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.4 |
|---|---|
| Target | 21.0 |
| Herbie | 10.8 |
if b < -7.668263498157484e-23Initial program 55.0
Simplified55.0
rmApplied clear-num55.0
Simplified55.0
Taylor expanded around -inf 7.0
Simplified7.0
if -7.668263498157484e-23 < b < 2.9380396584045826e+94Initial program 15.6
Simplified15.6
rmApplied clear-num15.7
Simplified15.8
if 2.9380396584045826e+94 < b Initial program 46.7
Simplified46.7
Taylor expanded around inf 3.9
Simplified3.9
Final simplification10.8
herbie shell --seed 2019195 +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)))