\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -4.170773079316174 \cdot 10^{+99}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\mathbf{elif}\;b \le 3.0168583404714427 \cdot 10^{-66}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(c \cdot a\right) \cdot -4\right)}}{a} - \frac{b}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r3283078 = b;
double r3283079 = -r3283078;
double r3283080 = r3283078 * r3283078;
double r3283081 = 4.0;
double r3283082 = a;
double r3283083 = r3283081 * r3283082;
double r3283084 = c;
double r3283085 = r3283083 * r3283084;
double r3283086 = r3283080 - r3283085;
double r3283087 = sqrt(r3283086);
double r3283088 = r3283079 + r3283087;
double r3283089 = 2.0;
double r3283090 = r3283089 * r3283082;
double r3283091 = r3283088 / r3283090;
return r3283091;
}
double f(double a, double b, double c) {
double r3283092 = b;
double r3283093 = -4.170773079316174e+99;
bool r3283094 = r3283092 <= r3283093;
double r3283095 = c;
double r3283096 = r3283095 / r3283092;
double r3283097 = a;
double r3283098 = r3283092 / r3283097;
double r3283099 = r3283096 - r3283098;
double r3283100 = 2.0;
double r3283101 = r3283099 * r3283100;
double r3283102 = r3283101 / r3283100;
double r3283103 = 3.0168583404714427e-66;
bool r3283104 = r3283092 <= r3283103;
double r3283105 = r3283095 * r3283097;
double r3283106 = -4.0;
double r3283107 = r3283105 * r3283106;
double r3283108 = fma(r3283092, r3283092, r3283107);
double r3283109 = sqrt(r3283108);
double r3283110 = r3283109 / r3283097;
double r3283111 = r3283110 - r3283098;
double r3283112 = r3283111 / r3283100;
double r3283113 = -2.0;
double r3283114 = r3283113 * r3283096;
double r3283115 = r3283114 / r3283100;
double r3283116 = r3283104 ? r3283112 : r3283115;
double r3283117 = r3283094 ? r3283102 : r3283116;
return r3283117;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.2 |
|---|---|
| Target | 20.2 |
| Herbie | 9.7 |
if b < -4.170773079316174e+99Initial program 44.2
Simplified44.2
Taylor expanded around inf 44.2
Taylor expanded around -inf 3.3
Simplified3.3
if -4.170773079316174e+99 < b < 3.0168583404714427e-66Initial program 12.8
Simplified12.8
Taylor expanded around inf 12.8
rmApplied div-sub12.8
if 3.0168583404714427e-66 < b Initial program 53.1
Simplified53.1
Taylor expanded around inf 53.0
Taylor expanded around inf 8.5
Final simplification9.7
herbie shell --seed 2019143 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))