\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 -9661478263987.111328125:\\
\;\;\;\;\frac{c \cdot \sqrt[3]{-1}}{b} \cdot \left(\sqrt[3]{-1} \cdot \sqrt[3]{-1}\right)\\
\mathbf{elif}\;b \le -1.244932636718084290671504385697528170065 \cdot 10^{-183}:\\
\;\;\;\;\frac{\frac{a \cdot \left(c \cdot 4\right) + \left({b}^{2} - {b}^{2}\right)}{\sqrt{\mathsf{fma}\left(a, 4 \cdot \left(-c\right), {b}^{2}\right)} - b}}{2 \cdot a}\\
\mathbf{elif}\;b \le 2.280923374767716130571300401308257426651 \cdot 10^{83}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{\mathsf{fma}\left(a, 4 \cdot \left(-c\right), {b}^{2}\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 r71461 = b;
double r71462 = -r71461;
double r71463 = r71461 * r71461;
double r71464 = 4.0;
double r71465 = a;
double r71466 = c;
double r71467 = r71465 * r71466;
double r71468 = r71464 * r71467;
double r71469 = r71463 - r71468;
double r71470 = sqrt(r71469);
double r71471 = r71462 - r71470;
double r71472 = 2.0;
double r71473 = r71472 * r71465;
double r71474 = r71471 / r71473;
return r71474;
}
double f(double a, double b, double c) {
double r71475 = b;
double r71476 = -9661478263987.111;
bool r71477 = r71475 <= r71476;
double r71478 = c;
double r71479 = -1.0;
double r71480 = cbrt(r71479);
double r71481 = r71478 * r71480;
double r71482 = r71481 / r71475;
double r71483 = r71480 * r71480;
double r71484 = r71482 * r71483;
double r71485 = -1.2449326367180843e-183;
bool r71486 = r71475 <= r71485;
double r71487 = a;
double r71488 = 4.0;
double r71489 = r71478 * r71488;
double r71490 = r71487 * r71489;
double r71491 = 2.0;
double r71492 = pow(r71475, r71491);
double r71493 = r71492 - r71492;
double r71494 = r71490 + r71493;
double r71495 = -r71478;
double r71496 = r71488 * r71495;
double r71497 = fma(r71487, r71496, r71492);
double r71498 = sqrt(r71497);
double r71499 = r71498 - r71475;
double r71500 = r71494 / r71499;
double r71501 = 2.0;
double r71502 = r71501 * r71487;
double r71503 = r71500 / r71502;
double r71504 = 2.280923374767716e+83;
bool r71505 = r71475 <= r71504;
double r71506 = -r71475;
double r71507 = r71506 / r71502;
double r71508 = r71498 / r71502;
double r71509 = r71507 - r71508;
double r71510 = 1.0;
double r71511 = r71478 / r71475;
double r71512 = r71475 / r71487;
double r71513 = r71511 - r71512;
double r71514 = r71510 * r71513;
double r71515 = r71505 ? r71509 : r71514;
double r71516 = r71486 ? r71503 : r71515;
double r71517 = r71477 ? r71484 : r71516;
return r71517;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.3 |
|---|---|
| Target | 21.1 |
| Herbie | 8.6 |
if b < -9661478263987.111Initial program 56.4
Taylor expanded around -inf 5.0
Simplified5.9
rmApplied *-un-lft-identity5.9
Applied *-un-lft-identity5.9
Applied times-frac5.9
Applied add-cube-cbrt5.9
Applied times-frac5.9
Simplified5.9
Simplified5.0
if -9661478263987.111 < b < -1.2449326367180843e-183Initial program 34.1
rmApplied flip--34.1
Simplified18.3
Simplified18.3
if -1.2449326367180843e-183 < b < 2.280923374767716e+83Initial program 10.5
rmApplied div-sub10.5
Simplified10.5
Simplified10.5
if 2.280923374767716e+83 < b Initial program 43.8
Taylor expanded around inf 3.5
Simplified3.5
Final simplification8.6
herbie shell --seed 2019194 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))