\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.857238265713216596268581045781308602833 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 8.706117685651469092807044052871735370705 \cdot 10^{-130}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}}\\
\mathbf{elif}\;b \le 16056697633982866014018962968901844992:\\
\;\;\;\;\frac{1}{\left(2 \cdot a\right) \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{\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 r88417 = b;
double r88418 = -r88417;
double r88419 = r88417 * r88417;
double r88420 = 4.0;
double r88421 = a;
double r88422 = r88420 * r88421;
double r88423 = c;
double r88424 = r88422 * r88423;
double r88425 = r88419 - r88424;
double r88426 = sqrt(r88425);
double r88427 = r88418 + r88426;
double r88428 = 2.0;
double r88429 = r88428 * r88421;
double r88430 = r88427 / r88429;
return r88430;
}
double f(double a, double b, double c) {
double r88431 = b;
double r88432 = -1.8572382657132166e+109;
bool r88433 = r88431 <= r88432;
double r88434 = 1.0;
double r88435 = c;
double r88436 = r88435 / r88431;
double r88437 = a;
double r88438 = r88431 / r88437;
double r88439 = r88436 - r88438;
double r88440 = r88434 * r88439;
double r88441 = 8.706117685651469e-130;
bool r88442 = r88431 <= r88441;
double r88443 = 1.0;
double r88444 = 2.0;
double r88445 = r88444 * r88437;
double r88446 = r88431 * r88431;
double r88447 = 4.0;
double r88448 = r88447 * r88437;
double r88449 = r88448 * r88435;
double r88450 = r88446 - r88449;
double r88451 = sqrt(r88450);
double r88452 = r88451 - r88431;
double r88453 = r88445 / r88452;
double r88454 = r88443 / r88453;
double r88455 = 1.6056697633982866e+37;
bool r88456 = r88431 <= r88455;
double r88457 = -r88431;
double r88458 = r88457 - r88451;
double r88459 = r88458 / r88449;
double r88460 = r88445 * r88459;
double r88461 = r88443 / r88460;
double r88462 = -1.0;
double r88463 = r88462 * r88436;
double r88464 = r88456 ? r88461 : r88463;
double r88465 = r88442 ? r88454 : r88464;
double r88466 = r88433 ? r88440 : r88465;
return r88466;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.5 |
|---|---|
| Target | 20.8 |
| Herbie | 8.9 |
if b < -1.8572382657132166e+109Initial program 50.1
Taylor expanded around -inf 3.6
Simplified3.6
if -1.8572382657132166e+109 < b < 8.706117685651469e-130Initial program 11.5
rmApplied clear-num11.6
Simplified11.6
if 8.706117685651469e-130 < b < 1.6056697633982866e+37Initial program 37.3
rmApplied flip-+37.3
Simplified16.8
rmApplied clear-num16.9
Simplified16.9
rmApplied *-un-lft-identity16.9
Applied add-sqr-sqrt16.9
Applied times-frac16.9
Applied associate-/l*17.0
Simplified16.9
if 1.6056697633982866e+37 < b Initial program 57.1
Taylor expanded around inf 4.2
Final simplification8.9
herbie shell --seed 2019347 +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)))