\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 -7.93152454634661985 \cdot 10^{153}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -5.09754230413862019 \cdot 10^{-301}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{elif}\;b \le 1.77031934398909708 \cdot 10^{52}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{4 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r213971 = b;
double r213972 = -r213971;
double r213973 = r213971 * r213971;
double r213974 = 4.0;
double r213975 = a;
double r213976 = r213974 * r213975;
double r213977 = c;
double r213978 = r213976 * r213977;
double r213979 = r213973 - r213978;
double r213980 = sqrt(r213979);
double r213981 = r213972 + r213980;
double r213982 = 2.0;
double r213983 = r213982 * r213975;
double r213984 = r213981 / r213983;
return r213984;
}
double f(double a, double b, double c) {
double r213985 = b;
double r213986 = -7.93152454634662e+153;
bool r213987 = r213985 <= r213986;
double r213988 = 1.0;
double r213989 = c;
double r213990 = r213989 / r213985;
double r213991 = a;
double r213992 = r213985 / r213991;
double r213993 = r213990 - r213992;
double r213994 = r213988 * r213993;
double r213995 = -5.09754230413862e-301;
bool r213996 = r213985 <= r213995;
double r213997 = -r213985;
double r213998 = r213985 * r213985;
double r213999 = 4.0;
double r214000 = r213999 * r213991;
double r214001 = r214000 * r213989;
double r214002 = r213998 - r214001;
double r214003 = sqrt(r214002);
double r214004 = r213997 + r214003;
double r214005 = 2.0;
double r214006 = r214005 * r213991;
double r214007 = r214004 / r214006;
double r214008 = 1.770319343989097e+52;
bool r214009 = r213985 <= r214008;
double r214010 = 1.0;
double r214011 = r214010 / r214005;
double r214012 = r213999 * r213989;
double r214013 = r213997 - r214003;
double r214014 = r214012 / r214013;
double r214015 = r214011 * r214014;
double r214016 = -1.0;
double r214017 = r214016 * r213990;
double r214018 = r214009 ? r214015 : r214017;
double r214019 = r213996 ? r214007 : r214018;
double r214020 = r213987 ? r213994 : r214019;
return r214020;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 21.2 |
| Herbie | 6.7 |
if b < -7.93152454634662e+153Initial program 63.8
Taylor expanded around -inf 1.9
Simplified1.9
if -7.93152454634662e+153 < b < -5.09754230413862e-301Initial program 8.5
if -5.09754230413862e-301 < b < 1.770319343989097e+52Initial program 29.0
rmApplied flip-+29.0
Simplified17.3
rmApplied *-un-lft-identity17.3
Applied *-un-lft-identity17.3
Applied times-frac17.3
Applied times-frac17.3
Simplified17.3
Simplified17.0
Taylor expanded around 0 9.7
if 1.770319343989097e+52 < b Initial program 57.0
Taylor expanded around inf 3.7
Final simplification6.7
herbie shell --seed 2020043
(FPCore (a b c)
:name "The quadratic formula (r1)"
:precision binary64
:herbie-target
(if (< b 0.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)))