\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 -0.1973887031618163923063491438369965180755:\\
\;\;\;\;\frac{1}{2} \cdot \left(2 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\right)\\
\mathbf{elif}\;b \le -7.171823963983999441512307744546786541929 \cdot 10^{-310}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{elif}\;b \le 2.730494439370032074747470763239053019705 \cdot 10^{75}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{1}{\frac{\frac{1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}{c}}{4}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} \cdot \left(-2 \cdot \frac{c}{b}\right)\\
\end{array}double f(double a, double b, double c) {
double r63423 = b;
double r63424 = -r63423;
double r63425 = r63423 * r63423;
double r63426 = 4.0;
double r63427 = a;
double r63428 = r63426 * r63427;
double r63429 = c;
double r63430 = r63428 * r63429;
double r63431 = r63425 - r63430;
double r63432 = sqrt(r63431);
double r63433 = r63424 + r63432;
double r63434 = 2.0;
double r63435 = r63434 * r63427;
double r63436 = r63433 / r63435;
return r63436;
}
double f(double a, double b, double c) {
double r63437 = b;
double r63438 = -0.1973887031618164;
bool r63439 = r63437 <= r63438;
double r63440 = 1.0;
double r63441 = 2.0;
double r63442 = r63440 / r63441;
double r63443 = c;
double r63444 = r63443 / r63437;
double r63445 = a;
double r63446 = r63437 / r63445;
double r63447 = r63444 - r63446;
double r63448 = r63441 * r63447;
double r63449 = r63442 * r63448;
double r63450 = -7.171823963984e-310;
bool r63451 = r63437 <= r63450;
double r63452 = -r63437;
double r63453 = r63437 * r63437;
double r63454 = 4.0;
double r63455 = r63454 * r63445;
double r63456 = r63455 * r63443;
double r63457 = r63453 - r63456;
double r63458 = sqrt(r63457);
double r63459 = r63452 + r63458;
double r63460 = r63441 * r63445;
double r63461 = r63440 / r63460;
double r63462 = r63459 * r63461;
double r63463 = 2.730494439370032e+75;
bool r63464 = r63437 <= r63463;
double r63465 = r63452 - r63458;
double r63466 = r63440 * r63465;
double r63467 = r63466 / r63443;
double r63468 = r63467 / r63454;
double r63469 = r63440 / r63468;
double r63470 = r63442 * r63469;
double r63471 = -2.0;
double r63472 = r63471 * r63444;
double r63473 = r63442 * r63472;
double r63474 = r63464 ? r63470 : r63473;
double r63475 = r63451 ? r63462 : r63474;
double r63476 = r63439 ? r63449 : r63475;
return r63476;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 21.4 |
| Herbie | 7.9 |
if b < -0.1973887031618164Initial program 32.2
rmApplied flip-+59.4
Simplified58.8
rmApplied *-un-lft-identity58.8
Applied *-un-lft-identity58.8
Applied times-frac58.8
Applied times-frac58.8
Simplified58.8
Simplified59.8
rmApplied clear-num59.8
Simplified58.7
Taylor expanded around -inf 8.0
Simplified8.0
if -0.1973887031618164 < b < -7.171823963984e-310Initial program 10.9
rmApplied div-inv11.1
if -7.171823963984e-310 < b < 2.730494439370032e+75Initial program 30.4
rmApplied flip-+30.4
Simplified16.7
rmApplied *-un-lft-identity16.7
Applied *-un-lft-identity16.7
Applied times-frac16.7
Applied times-frac16.7
Simplified16.7
Simplified21.3
rmApplied clear-num21.5
Simplified9.7
if 2.730494439370032e+75 < b Initial program 58.6
rmApplied flip-+58.6
Simplified31.1
rmApplied *-un-lft-identity31.1
Applied *-un-lft-identity31.1
Applied times-frac31.1
Applied times-frac31.1
Simplified31.1
Simplified31.2
rmApplied clear-num31.3
Simplified28.9
Taylor expanded around inf 3.4
Final simplification7.9
herbie shell --seed 2019308
(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)))