\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 -2.847204280282031663920354805138023860461 \cdot 10^{48}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le 3.246218444991030358555013112397707766315 \cdot 10^{-248}:\\
\;\;\;\;\frac{1}{\frac{3 \cdot a}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}}\\
\mathbf{elif}\;b \le 4.265883575317037501760620997399796494232 \cdot 10^{111}:\\
\;\;\;\;\frac{\frac{c \cdot \left(3 \cdot a\right)}{3 \cdot a}}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r96996 = b;
double r96997 = -r96996;
double r96998 = r96996 * r96996;
double r96999 = 3.0;
double r97000 = a;
double r97001 = r96999 * r97000;
double r97002 = c;
double r97003 = r97001 * r97002;
double r97004 = r96998 - r97003;
double r97005 = sqrt(r97004);
double r97006 = r96997 + r97005;
double r97007 = r97006 / r97001;
return r97007;
}
double f(double a, double b, double c) {
double r97008 = b;
double r97009 = -2.8472042802820317e+48;
bool r97010 = r97008 <= r97009;
double r97011 = 0.5;
double r97012 = c;
double r97013 = r97012 / r97008;
double r97014 = r97011 * r97013;
double r97015 = 0.6666666666666666;
double r97016 = a;
double r97017 = r97008 / r97016;
double r97018 = r97015 * r97017;
double r97019 = r97014 - r97018;
double r97020 = 3.2462184449910304e-248;
bool r97021 = r97008 <= r97020;
double r97022 = 1.0;
double r97023 = 3.0;
double r97024 = r97023 * r97016;
double r97025 = r97008 * r97008;
double r97026 = r97024 * r97012;
double r97027 = r97025 - r97026;
double r97028 = sqrt(r97027);
double r97029 = r97028 - r97008;
double r97030 = r97024 / r97029;
double r97031 = r97022 / r97030;
double r97032 = 4.2658835753170375e+111;
bool r97033 = r97008 <= r97032;
double r97034 = r97012 * r97024;
double r97035 = r97034 / r97024;
double r97036 = -r97008;
double r97037 = r97036 - r97028;
double r97038 = r97035 / r97037;
double r97039 = -0.5;
double r97040 = r97039 * r97013;
double r97041 = r97033 ? r97038 : r97040;
double r97042 = r97021 ? r97031 : r97041;
double r97043 = r97010 ? r97019 : r97042;
return r97043;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -2.8472042802820317e+48Initial program 38.2
Taylor expanded around -inf 5.6
if -2.8472042802820317e+48 < b < 3.2462184449910304e-248Initial program 10.7
rmApplied clear-num10.7
Simplified10.7
if 3.2462184449910304e-248 < b < 4.2658835753170375e+111Initial program 34.1
rmApplied flip-+34.1
Simplified15.6
rmApplied div-inv15.6
rmApplied pow115.6
Applied pow115.6
Applied pow-prod-down15.6
Simplified14.6
if 4.2658835753170375e+111 < b Initial program 59.6
Taylor expanded around inf 2.0
Final simplification8.8
herbie shell --seed 2019212 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))