\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 -5.7874989996849275 \cdot 10^{-40}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\mathbf{elif}\;b \le 1.7665622931893247 \cdot 10^{+83}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{\mathsf{fma}\left(-\sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}, \sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}, \sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}} \cdot \sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}\right) + \mathsf{fma}\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}, \sqrt[3]{-b}, \sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}} \cdot \left(-\sqrt{\sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}\right)\right)}{a}} \cdot \left(\sqrt[3]{\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}{a}} \cdot \sqrt[3]{\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}{a}}\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\end{array}double f(double a, double b, double c) {
double r996392 = b;
double r996393 = -r996392;
double r996394 = r996392 * r996392;
double r996395 = 4.0;
double r996396 = a;
double r996397 = c;
double r996398 = r996396 * r996397;
double r996399 = r996395 * r996398;
double r996400 = r996394 - r996399;
double r996401 = sqrt(r996400);
double r996402 = r996393 - r996401;
double r996403 = 2.0;
double r996404 = r996403 * r996396;
double r996405 = r996402 / r996404;
return r996405;
}
double f(double a, double b, double c) {
double r996406 = b;
double r996407 = -5.7874989996849275e-40;
bool r996408 = r996406 <= r996407;
double r996409 = -2.0;
double r996410 = c;
double r996411 = r996410 / r996406;
double r996412 = r996409 * r996411;
double r996413 = 2.0;
double r996414 = r996412 / r996413;
double r996415 = 1.7665622931893247e+83;
bool r996416 = r996406 <= r996415;
double r996417 = a;
double r996418 = -4.0;
double r996419 = r996417 * r996418;
double r996420 = r996406 * r996406;
double r996421 = fma(r996419, r996410, r996420);
double r996422 = cbrt(r996421);
double r996423 = sqrt(r996422);
double r996424 = -r996423;
double r996425 = r996422 * r996422;
double r996426 = sqrt(r996425);
double r996427 = r996426 * r996423;
double r996428 = fma(r996424, r996426, r996427);
double r996429 = -r996406;
double r996430 = cbrt(r996429);
double r996431 = r996430 * r996430;
double r996432 = -r996426;
double r996433 = r996423 * r996432;
double r996434 = fma(r996431, r996430, r996433);
double r996435 = r996428 + r996434;
double r996436 = r996435 / r996417;
double r996437 = cbrt(r996436);
double r996438 = sqrt(r996421);
double r996439 = r996429 - r996438;
double r996440 = r996439 / r996417;
double r996441 = cbrt(r996440);
double r996442 = r996441 * r996441;
double r996443 = r996437 * r996442;
double r996444 = r996443 / r996413;
double r996445 = r996406 / r996417;
double r996446 = r996411 - r996445;
double r996447 = r996446 * r996413;
double r996448 = r996447 / r996413;
double r996449 = r996416 ? r996444 : r996448;
double r996450 = r996408 ? r996414 : r996449;
return r996450;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.3 |
|---|---|
| Target | 20.4 |
| Herbie | 10.1 |
if b < -5.7874989996849275e-40Initial program 53.7
Simplified53.7
Taylor expanded around -inf 7.3
if -5.7874989996849275e-40 < b < 1.7665622931893247e+83Initial program 13.8
Simplified13.8
rmApplied add-cube-cbrt14.7
rmApplied add-cube-cbrt14.6
Applied sqrt-prod14.6
Applied add-cube-cbrt14.6
Applied prod-diff14.7
if 1.7665622931893247e+83 < b Initial program 42.5
Simplified42.5
Taylor expanded around inf 3.9
Simplified3.9
Final simplification10.1
herbie shell --seed 2019156 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 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)))