\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.2890050783826923 \cdot 10^{-183}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\mathbf{elif}\;b \le 1.786204067849289 \cdot 10^{+100}:\\
\;\;\;\;\frac{\frac{1}{a} \cdot \left(\left(-b\right) - \sqrt{\left(a \cdot -4\right) \cdot c + b \cdot b}\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\left(\frac{a}{\frac{b}{c}} - b\right) \cdot 2}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r1229001 = b;
double r1229002 = -r1229001;
double r1229003 = r1229001 * r1229001;
double r1229004 = 4.0;
double r1229005 = a;
double r1229006 = c;
double r1229007 = r1229005 * r1229006;
double r1229008 = r1229004 * r1229007;
double r1229009 = r1229003 - r1229008;
double r1229010 = sqrt(r1229009);
double r1229011 = r1229002 - r1229010;
double r1229012 = 2.0;
double r1229013 = r1229012 * r1229005;
double r1229014 = r1229011 / r1229013;
return r1229014;
}
double f(double a, double b, double c) {
double r1229015 = b;
double r1229016 = -1.2890050783826923e-183;
bool r1229017 = r1229015 <= r1229016;
double r1229018 = -2.0;
double r1229019 = c;
double r1229020 = r1229019 / r1229015;
double r1229021 = r1229018 * r1229020;
double r1229022 = 2.0;
double r1229023 = r1229021 / r1229022;
double r1229024 = 1.786204067849289e+100;
bool r1229025 = r1229015 <= r1229024;
double r1229026 = 1.0;
double r1229027 = a;
double r1229028 = r1229026 / r1229027;
double r1229029 = -r1229015;
double r1229030 = -4.0;
double r1229031 = r1229027 * r1229030;
double r1229032 = r1229031 * r1229019;
double r1229033 = r1229015 * r1229015;
double r1229034 = r1229032 + r1229033;
double r1229035 = sqrt(r1229034);
double r1229036 = r1229029 - r1229035;
double r1229037 = r1229028 * r1229036;
double r1229038 = r1229037 / r1229022;
double r1229039 = r1229015 / r1229019;
double r1229040 = r1229027 / r1229039;
double r1229041 = r1229040 - r1229015;
double r1229042 = r1229041 * r1229022;
double r1229043 = r1229042 / r1229027;
double r1229044 = r1229043 / r1229022;
double r1229045 = r1229025 ? r1229038 : r1229044;
double r1229046 = r1229017 ? r1229023 : r1229045;
return r1229046;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.6 |
|---|---|
| Target | 20.5 |
| Herbie | 11.3 |
if b < -1.2890050783826923e-183Initial program 48.2
Simplified48.2
rmApplied fma-udef48.2
Taylor expanded around -inf 14.3
if -1.2890050783826923e-183 < b < 1.786204067849289e+100Initial program 10.5
Simplified10.6
rmApplied fma-udef10.6
rmApplied div-inv10.7
if 1.786204067849289e+100 < b Initial program 44.2
Simplified44.2
rmApplied fma-udef44.2
Taylor expanded around inf 9.2
Simplified3.4
Final simplification11.3
herbie shell --seed 2019151 +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)))