\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.6038168240882645 \cdot 10^{144}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -3.2731438419880699 \cdot 10^{-203}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\\
\mathbf{elif}\;b \le 2.1125387673008883 \cdot 10^{122}:\\
\;\;\;\;\frac{\frac{\frac{1}{\frac{2}{4}}}{\frac{1}{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 r284431 = b;
double r284432 = -r284431;
double r284433 = r284431 * r284431;
double r284434 = 4.0;
double r284435 = a;
double r284436 = r284434 * r284435;
double r284437 = c;
double r284438 = r284436 * r284437;
double r284439 = r284433 - r284438;
double r284440 = sqrt(r284439);
double r284441 = r284432 + r284440;
double r284442 = 2.0;
double r284443 = r284442 * r284435;
double r284444 = r284441 / r284443;
return r284444;
}
double f(double a, double b, double c) {
double r284445 = b;
double r284446 = -7.603816824088264e+144;
bool r284447 = r284445 <= r284446;
double r284448 = 1.0;
double r284449 = c;
double r284450 = r284449 / r284445;
double r284451 = a;
double r284452 = r284445 / r284451;
double r284453 = r284450 - r284452;
double r284454 = r284448 * r284453;
double r284455 = -3.27314384198807e-203;
bool r284456 = r284445 <= r284455;
double r284457 = -r284445;
double r284458 = r284445 * r284445;
double r284459 = 4.0;
double r284460 = r284459 * r284451;
double r284461 = r284460 * r284449;
double r284462 = r284458 - r284461;
double r284463 = sqrt(r284462);
double r284464 = sqrt(r284463);
double r284465 = r284464 * r284464;
double r284466 = r284457 + r284465;
double r284467 = 2.0;
double r284468 = r284467 * r284451;
double r284469 = r284466 / r284468;
double r284470 = 2.1125387673008883e+122;
bool r284471 = r284445 <= r284470;
double r284472 = 1.0;
double r284473 = r284467 / r284459;
double r284474 = r284472 / r284473;
double r284475 = r284472 / r284449;
double r284476 = r284474 / r284475;
double r284477 = r284457 - r284463;
double r284478 = r284476 / r284477;
double r284479 = -1.0;
double r284480 = r284479 * r284450;
double r284481 = r284471 ? r284478 : r284480;
double r284482 = r284456 ? r284469 : r284481;
double r284483 = r284447 ? r284454 : r284482;
return r284483;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.2 |
| Herbie | 6.5 |
if b < -7.603816824088264e+144Initial program 61.2
Taylor expanded around -inf 2.8
Simplified2.8
if -7.603816824088264e+144 < b < -3.27314384198807e-203Initial program 7.1
rmApplied add-sqr-sqrt7.1
Applied sqrt-prod7.4
if -3.27314384198807e-203 < b < 2.1125387673008883e+122Initial program 29.8
rmApplied flip-+29.9
Simplified16.2
rmApplied clear-num16.3
Simplified15.5
rmApplied associate-/r*15.3
Simplified9.5
if 2.1125387673008883e+122 < b Initial program 61.1
Taylor expanded around inf 2.1
Final simplification6.5
herbie shell --seed 2020036
(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)))