\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{\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}} \cdot \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)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot \left(-c\right), 4, 0\right)}{2 \cdot b}}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r50682 = b;
double r50683 = -r50682;
double r50684 = r50682 * r50682;
double r50685 = 4.0;
double r50686 = a;
double r50687 = r50685 * r50686;
double r50688 = c;
double r50689 = r50687 * r50688;
double r50690 = r50684 - r50689;
double r50691 = sqrt(r50690);
double r50692 = r50683 + r50691;
double r50693 = 2.0;
double r50694 = r50693 * r50686;
double r50695 = r50692 / r50694;
return r50695;
}
double f(double a, double b, double c) {
double r50696 = b;
double r50697 = 2.4944562401296086e-289;
bool r50698 = r50696 <= r50697;
double r50699 = a;
double r50700 = -r50699;
double r50701 = 4.0;
double r50702 = r50700 * r50701;
double r50703 = c;
double r50704 = r50696 * r50696;
double r50705 = fma(r50702, r50703, r50704);
double r50706 = sqrt(r50705);
double r50707 = r50706 - r50696;
double r50708 = r50707 / r50699;
double r50709 = 2.0;
double r50710 = r50708 / r50709;
double r50711 = 3.224491050532555e+112;
bool r50712 = r50696 <= r50711;
double r50713 = -1.0;
double r50714 = -r50703;
double r50715 = r50699 * r50714;
double r50716 = fma(r50701, r50715, r50704);
double r50717 = sqrt(r50716);
double r50718 = r50717 + r50696;
double r50719 = cbrt(r50718);
double r50720 = r50713 / r50719;
double r50721 = r50720 / r50719;
double r50722 = r50699 / r50699;
double r50723 = r50701 * r50703;
double r50724 = r50723 / r50719;
double r50725 = r50722 * r50724;
double r50726 = r50721 * r50725;
double r50727 = r50726 / r50709;
double r50728 = 0.0;
double r50729 = fma(r50715, r50701, r50728);
double r50730 = 2.0;
double r50731 = r50730 * r50696;
double r50732 = r50729 / r50731;
double r50733 = r50732 / r50699;
double r50734 = r50733 / r50709;
double r50735 = r50712 ? r50727 : r50734;
double r50736 = r50698 ? r50710 : r50735;
return r50736;
}



Bits error versus a



Bits error versus b



Bits error versus c
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 "Quadratic roots, full range"
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))