\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 -9.66568096049333791 \cdot 10^{-39}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 1.96400887454670113 \cdot 10^{84}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r106963 = b;
double r106964 = -r106963;
double r106965 = r106963 * r106963;
double r106966 = 4.0;
double r106967 = a;
double r106968 = c;
double r106969 = r106967 * r106968;
double r106970 = r106966 * r106969;
double r106971 = r106965 - r106970;
double r106972 = sqrt(r106971);
double r106973 = r106964 - r106972;
double r106974 = 2.0;
double r106975 = r106974 * r106967;
double r106976 = r106973 / r106975;
return r106976;
}
double f(double a, double b, double c) {
double r106977 = b;
double r106978 = -9.665680960493338e-39;
bool r106979 = r106977 <= r106978;
double r106980 = -1.0;
double r106981 = c;
double r106982 = r106981 / r106977;
double r106983 = r106980 * r106982;
double r106984 = 1.964008874546701e+84;
bool r106985 = r106977 <= r106984;
double r106986 = -r106977;
double r106987 = r106977 * r106977;
double r106988 = 4.0;
double r106989 = a;
double r106990 = r106989 * r106981;
double r106991 = r106988 * r106990;
double r106992 = r106987 - r106991;
double r106993 = sqrt(r106992);
double r106994 = r106986 - r106993;
double r106995 = 2.0;
double r106996 = r106995 * r106989;
double r106997 = r106994 / r106996;
double r106998 = r106977 / r106989;
double r106999 = r106980 * r106998;
double r107000 = r106985 ? r106997 : r106999;
double r107001 = r106979 ? r106983 : r107000;
return r107001;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.4 |
|---|---|
| Target | 21.3 |
| Herbie | 10.2 |
if b < -9.665680960493338e-39Initial program 55.2
Taylor expanded around -inf 6.9
if -9.665680960493338e-39 < b < 1.964008874546701e+84Initial program 14.7
if 1.964008874546701e+84 < b Initial program 44.4
rmApplied clear-num44.5
Taylor expanded around 0 4.8
Final simplification10.2
herbie shell --seed 2020042 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.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)))