\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 -1.11981154530853106611761327467786604265 \cdot 10^{143}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 4.718890261991468628346768591871377778707 \cdot 10^{-106}:\\
\;\;\;\;\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 r49464 = b;
double r49465 = -r49464;
double r49466 = r49464 * r49464;
double r49467 = 4.0;
double r49468 = a;
double r49469 = r49467 * r49468;
double r49470 = c;
double r49471 = r49469 * r49470;
double r49472 = r49466 - r49471;
double r49473 = sqrt(r49472);
double r49474 = r49465 + r49473;
double r49475 = 2.0;
double r49476 = r49475 * r49468;
double r49477 = r49474 / r49476;
return r49477;
}
double f(double a, double b, double c) {
double r49478 = b;
double r49479 = -1.119811545308531e+143;
bool r49480 = r49478 <= r49479;
double r49481 = 1.0;
double r49482 = c;
double r49483 = r49482 / r49478;
double r49484 = a;
double r49485 = r49478 / r49484;
double r49486 = r49483 - r49485;
double r49487 = r49481 * r49486;
double r49488 = 4.718890261991469e-106;
bool r49489 = r49478 <= r49488;
double r49490 = r49478 * r49478;
double r49491 = 4.0;
double r49492 = r49491 * r49484;
double r49493 = r49492 * r49482;
double r49494 = r49490 - r49493;
double r49495 = sqrt(r49494);
double r49496 = r49495 - r49478;
double r49497 = 2.0;
double r49498 = r49497 * r49484;
double r49499 = r49496 / r49498;
double r49500 = -1.0;
double r49501 = r49500 * r49483;
double r49502 = r49489 ? r49499 : r49501;
double r49503 = r49480 ? r49487 : r49502;
return r49503;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 21.0 |
| Herbie | 10.0 |
if b < -1.119811545308531e+143Initial program 59.0
Simplified59.0
Taylor expanded around -inf 2.4
Simplified2.4
if -1.119811545308531e+143 < b < 4.718890261991469e-106Initial program 11.1
Simplified11.1
rmApplied div-inv11.2
rmApplied un-div-inv11.1
if 4.718890261991469e-106 < b Initial program 52.4
Simplified52.4
Taylor expanded around inf 10.9
Final simplification10.0
herbie shell --seed 2019326 +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)))