\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 2.49445624012960862396084940365110205816 \cdot 10^{-289}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot 4, c, b \cdot b\right)} - b}{a}}{2}\\
\mathbf{elif}\;b \le 3.224491050532555179035846228386712352959 \cdot 10^{112}:\\
\;\;\;\;\frac{\left(\frac{a}{a} \cdot \frac{4 \cdot c}{\sqrt[3]{\sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)} + b}}\right) \cdot \frac{\frac{-1}{\sqrt[3]{\sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)} + b}}}{\sqrt[3]{\sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)} + b}}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot \left(-c\right), 4, 0\right)}{b + b}}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r121456 = b;
double r121457 = -r121456;
double r121458 = r121456 * r121456;
double r121459 = 4.0;
double r121460 = a;
double r121461 = r121459 * r121460;
double r121462 = c;
double r121463 = r121461 * r121462;
double r121464 = r121458 - r121463;
double r121465 = sqrt(r121464);
double r121466 = r121457 + r121465;
double r121467 = 2.0;
double r121468 = r121467 * r121460;
double r121469 = r121466 / r121468;
return r121469;
}
double f(double a, double b, double c) {
double r121470 = b;
double r121471 = 2.4944562401296086e-289;
bool r121472 = r121470 <= r121471;
double r121473 = a;
double r121474 = -r121473;
double r121475 = 4.0;
double r121476 = r121474 * r121475;
double r121477 = c;
double r121478 = r121470 * r121470;
double r121479 = fma(r121476, r121477, r121478);
double r121480 = sqrt(r121479);
double r121481 = r121480 - r121470;
double r121482 = r121481 / r121473;
double r121483 = 2.0;
double r121484 = r121482 / r121483;
double r121485 = 3.224491050532555e+112;
bool r121486 = r121470 <= r121485;
double r121487 = r121473 / r121473;
double r121488 = r121475 * r121477;
double r121489 = -r121477;
double r121490 = r121473 * r121489;
double r121491 = fma(r121475, r121490, r121478);
double r121492 = sqrt(r121491);
double r121493 = r121492 + r121470;
double r121494 = cbrt(r121493);
double r121495 = r121488 / r121494;
double r121496 = r121487 * r121495;
double r121497 = -1.0;
double r121498 = r121497 / r121494;
double r121499 = r121498 / r121494;
double r121500 = r121496 * r121499;
double r121501 = r121500 / r121483;
double r121502 = 0.0;
double r121503 = fma(r121490, r121475, r121502);
double r121504 = r121470 + r121470;
double r121505 = r121503 / r121504;
double r121506 = r121505 / r121473;
double r121507 = r121506 / r121483;
double r121508 = r121486 ? r121501 : r121507;
double r121509 = r121472 ? r121484 : r121508;
return r121509;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.6 |
|---|---|
| Target | 21.0 |
| Herbie | 16.2 |
if b < 2.4944562401296086e-289Initial program 22.5
Simplified22.5
rmApplied *-un-lft-identity22.5
Applied *-un-lft-identity22.5
Applied times-frac22.5
Simplified22.5
Simplified22.5
if 2.4944562401296086e-289 < b < 3.224491050532555e+112Initial program 33.8
Simplified33.8
rmApplied flip--33.8
Simplified15.8
Simplified15.8
rmApplied *-un-lft-identity15.8
Applied add-cube-cbrt16.5
Applied *-un-lft-identity16.5
Applied times-frac16.5
Applied times-frac15.8
Simplified15.8
Simplified9.1
if 3.224491050532555e+112 < b Initial program 60.8
Simplified60.8
rmApplied flip--60.8
Simplified32.5
Simplified32.5
Taylor expanded around 0 13.1
Final simplification16.2
herbie shell --seed 2019194 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))