\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.3030622379606599 \cdot 10^{+153}:\\
\;\;\;\;\left(\frac{c}{b} \cdot \frac{3}{2} - 2 \cdot \frac{b}{a}\right) \cdot \frac{1}{3}\\
\mathbf{elif}\;b \le 2.5044838769273558 \cdot 10^{-121}:\\
\;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b + -3 \cdot \left(a \cdot c\right)} - b}}\\
\mathbf{elif}\;b \le 1.0342433475418466 \cdot 10^{-79}:\\
\;\;\;\;\frac{c}{b} \cdot \frac{-1}{2}\\
\mathbf{elif}\;b \le 1.7543503512431287 \cdot 10^{-69}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)} - b}{\sqrt[3]{3} \cdot a} \cdot \frac{1}{\sqrt[3]{3} \cdot \sqrt[3]{3}}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} \cdot \frac{-1}{2}\\
\end{array}double f(double a, double b, double c) {
double r6206689 = b;
double r6206690 = -r6206689;
double r6206691 = r6206689 * r6206689;
double r6206692 = 3.0;
double r6206693 = a;
double r6206694 = r6206692 * r6206693;
double r6206695 = c;
double r6206696 = r6206694 * r6206695;
double r6206697 = r6206691 - r6206696;
double r6206698 = sqrt(r6206697);
double r6206699 = r6206690 + r6206698;
double r6206700 = r6206699 / r6206694;
return r6206700;
}
double f(double a, double b, double c) {
double r6206701 = b;
double r6206702 = -1.3030622379606599e+153;
bool r6206703 = r6206701 <= r6206702;
double r6206704 = c;
double r6206705 = r6206704 / r6206701;
double r6206706 = 1.5;
double r6206707 = r6206705 * r6206706;
double r6206708 = 2.0;
double r6206709 = a;
double r6206710 = r6206701 / r6206709;
double r6206711 = r6206708 * r6206710;
double r6206712 = r6206707 - r6206711;
double r6206713 = 0.3333333333333333;
double r6206714 = r6206712 * r6206713;
double r6206715 = 2.5044838769273558e-121;
bool r6206716 = r6206701 <= r6206715;
double r6206717 = 1.0;
double r6206718 = 3.0;
double r6206719 = r6206718 * r6206709;
double r6206720 = r6206701 * r6206701;
double r6206721 = -3.0;
double r6206722 = r6206709 * r6206704;
double r6206723 = r6206721 * r6206722;
double r6206724 = r6206720 + r6206723;
double r6206725 = sqrt(r6206724);
double r6206726 = r6206725 - r6206701;
double r6206727 = r6206719 / r6206726;
double r6206728 = r6206717 / r6206727;
double r6206729 = 1.0342433475418466e-79;
bool r6206730 = r6206701 <= r6206729;
double r6206731 = -0.5;
double r6206732 = r6206705 * r6206731;
double r6206733 = 1.7543503512431287e-69;
bool r6206734 = r6206701 <= r6206733;
double r6206735 = r6206704 * r6206719;
double r6206736 = r6206720 - r6206735;
double r6206737 = sqrt(r6206736);
double r6206738 = r6206737 - r6206701;
double r6206739 = cbrt(r6206718);
double r6206740 = r6206739 * r6206709;
double r6206741 = r6206738 / r6206740;
double r6206742 = r6206739 * r6206739;
double r6206743 = r6206717 / r6206742;
double r6206744 = r6206741 * r6206743;
double r6206745 = r6206734 ? r6206744 : r6206732;
double r6206746 = r6206730 ? r6206732 : r6206745;
double r6206747 = r6206716 ? r6206728 : r6206746;
double r6206748 = r6206703 ? r6206714 : r6206747;
return r6206748;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -1.3030622379606599e+153Initial program 60.2
Simplified60.2
rmApplied *-un-lft-identity60.2
Applied times-frac60.2
Simplified60.2
Taylor expanded around -inf 2.9
if -1.3030622379606599e+153 < b < 2.5044838769273558e-121Initial program 10.9
Simplified10.9
Taylor expanded around 0 10.9
Simplified10.9
rmApplied clear-num11.0
if 2.5044838769273558e-121 < b < 1.0342433475418466e-79 or 1.7543503512431287e-69 < b Initial program 50.7
Simplified50.7
Taylor expanded around inf 11.2
if 1.0342433475418466e-79 < b < 1.7543503512431287e-69Initial program 36.1
Simplified36.1
rmApplied add-cube-cbrt36.1
Applied associate-*l*36.1
Applied *-un-lft-identity36.1
Applied times-frac36.0
Final simplification10.5
herbie shell --seed 2019158
(FPCore (a b c)
:name "Cubic critical"
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))