\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 -3.2092322739463293 \cdot 10^{-86}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 2.891777552454845 \cdot 10^{+74}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-b}{a}\\
\end{array}double f(double a, double b, double c) {
double r3902387 = b;
double r3902388 = -r3902387;
double r3902389 = r3902387 * r3902387;
double r3902390 = 4.0;
double r3902391 = a;
double r3902392 = c;
double r3902393 = r3902391 * r3902392;
double r3902394 = r3902390 * r3902393;
double r3902395 = r3902389 - r3902394;
double r3902396 = sqrt(r3902395);
double r3902397 = r3902388 - r3902396;
double r3902398 = 2.0;
double r3902399 = r3902398 * r3902391;
double r3902400 = r3902397 / r3902399;
return r3902400;
}
double f(double a, double b, double c) {
double r3902401 = b;
double r3902402 = -3.2092322739463293e-86;
bool r3902403 = r3902401 <= r3902402;
double r3902404 = c;
double r3902405 = r3902404 / r3902401;
double r3902406 = -r3902405;
double r3902407 = 2.891777552454845e+74;
bool r3902408 = r3902401 <= r3902407;
double r3902409 = -r3902401;
double r3902410 = r3902401 * r3902401;
double r3902411 = a;
double r3902412 = r3902404 * r3902411;
double r3902413 = 4.0;
double r3902414 = r3902412 * r3902413;
double r3902415 = r3902410 - r3902414;
double r3902416 = sqrt(r3902415);
double r3902417 = r3902409 - r3902416;
double r3902418 = 2.0;
double r3902419 = r3902411 * r3902418;
double r3902420 = r3902417 / r3902419;
double r3902421 = r3902409 / r3902411;
double r3902422 = r3902408 ? r3902420 : r3902421;
double r3902423 = r3902403 ? r3902406 : r3902422;
return r3902423;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.6 |
|---|---|
| Target | 20.7 |
| Herbie | 10.0 |
if b < -3.2092322739463293e-86Initial program 52.3
rmApplied div-inv52.3
Simplified52.3
Taylor expanded around -inf 9.4
Simplified9.4
if -3.2092322739463293e-86 < b < 2.891777552454845e+74Initial program 13.1
if 2.891777552454845e+74 < b Initial program 38.9
rmApplied clear-num39.0
Taylor expanded around 0 4.4
Simplified4.4
Final simplification10.0
herbie shell --seed 2019130
(FPCore (a b c)
:name "The quadratic formula (r2)"
: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)))