\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 -2.2375225949334019 \cdot 10^{57}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 8.67970785211126629 \cdot 10^{-40}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r505 = b;
double r506 = -r505;
double r507 = r505 * r505;
double r508 = 4.0;
double r509 = a;
double r510 = r508 * r509;
double r511 = c;
double r512 = r510 * r511;
double r513 = r507 - r512;
double r514 = sqrt(r513);
double r515 = r506 + r514;
double r516 = 2.0;
double r517 = r516 * r509;
double r518 = r515 / r517;
return r518;
}
double f(double a, double b, double c) {
double r519 = b;
double r520 = -2.237522594933402e+57;
bool r521 = r519 <= r520;
double r522 = 1.0;
double r523 = c;
double r524 = r523 / r519;
double r525 = a;
double r526 = r519 / r525;
double r527 = r524 - r526;
double r528 = r522 * r527;
double r529 = 8.679707852111266e-40;
bool r530 = r519 <= r529;
double r531 = r519 * r519;
double r532 = 4.0;
double r533 = r532 * r525;
double r534 = r533 * r523;
double r535 = r531 - r534;
double r536 = sqrt(r535);
double r537 = r536 - r519;
double r538 = 2.0;
double r539 = r538 * r525;
double r540 = r537 / r539;
double r541 = -1.0;
double r542 = r541 * r524;
double r543 = r530 ? r540 : r542;
double r544 = r521 ? r528 : r543;
return r544;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.9 |
| Herbie | 10.6 |
if b < -2.237522594933402e+57Initial program 38.1
Taylor expanded around -inf 5.5
Simplified5.5
if -2.237522594933402e+57 < b < 8.679707852111266e-40Initial program 15.3
rmApplied div-inv15.4
rmApplied associate-*r/15.3
Simplified15.3
if 8.679707852111266e-40 < b Initial program 55.1
Taylor expanded around inf 7.5
Final simplification10.6
herbie shell --seed 2020025 +o rules:numerics
(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)))