\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.1730875761889226 \cdot 10^{119}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 1.567927026193799 \cdot 10^{-258}:\\
\;\;\;\;1 \cdot \frac{2 \cdot c}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}\\
\mathbf{elif}\;b \le 3.5474318569254359 \cdot 10^{93}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r89506 = b;
double r89507 = -r89506;
double r89508 = r89506 * r89506;
double r89509 = 4.0;
double r89510 = a;
double r89511 = c;
double r89512 = r89510 * r89511;
double r89513 = r89509 * r89512;
double r89514 = r89508 - r89513;
double r89515 = sqrt(r89514);
double r89516 = r89507 - r89515;
double r89517 = 2.0;
double r89518 = r89517 * r89510;
double r89519 = r89516 / r89518;
return r89519;
}
double f(double a, double b, double c) {
double r89520 = b;
double r89521 = -1.1730875761889226e+119;
bool r89522 = r89520 <= r89521;
double r89523 = -1.0;
double r89524 = c;
double r89525 = r89524 / r89520;
double r89526 = r89523 * r89525;
double r89527 = 1.567927026193799e-258;
bool r89528 = r89520 <= r89527;
double r89529 = 1.0;
double r89530 = 2.0;
double r89531 = r89530 * r89524;
double r89532 = r89520 * r89520;
double r89533 = 4.0;
double r89534 = a;
double r89535 = r89534 * r89524;
double r89536 = r89533 * r89535;
double r89537 = r89532 - r89536;
double r89538 = sqrt(r89537);
double r89539 = r89538 - r89520;
double r89540 = r89531 / r89539;
double r89541 = r89529 * r89540;
double r89542 = 3.547431856925436e+93;
bool r89543 = r89520 <= r89542;
double r89544 = -r89520;
double r89545 = r89544 - r89538;
double r89546 = r89530 * r89534;
double r89547 = r89545 / r89546;
double r89548 = 1.0;
double r89549 = r89520 / r89534;
double r89550 = r89525 - r89549;
double r89551 = r89548 * r89550;
double r89552 = r89543 ? r89547 : r89551;
double r89553 = r89528 ? r89541 : r89552;
double r89554 = r89522 ? r89526 : r89553;
return r89554;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.0 |
| Herbie | 6.4 |
if b < -1.1730875761889226e+119Initial program 60.9
Taylor expanded around -inf 1.9
if -1.1730875761889226e+119 < b < 1.567927026193799e-258Initial program 32.4
rmApplied div-inv32.5
rmApplied flip--32.5
Simplified15.8
Simplified15.8
rmApplied *-un-lft-identity15.8
Applied *-un-lft-identity15.8
Applied times-frac15.8
Applied associate-*l*15.8
Simplified14.7
Taylor expanded around 0 9.0
if 1.567927026193799e-258 < b < 3.547431856925436e+93Initial program 8.1
rmApplied div-inv8.3
rmApplied un-div-inv8.1
if 3.547431856925436e+93 < b Initial program 46.1
Taylor expanded around inf 4.1
Simplified4.1
Final simplification6.4
herbie shell --seed 2020027
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))