\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.56941706508999029 \cdot 10^{163}:\\
\;\;\;\;\frac{1.5 \cdot \frac{a \cdot c}{b} - 2 \cdot b}{3 \cdot a}\\
\mathbf{elif}\;b \le 1.1928781235179368 \cdot 10^{-176}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\\
\mathbf{elif}\;b \le 4.89881602212345888 \cdot 10^{152}:\\
\;\;\;\;\frac{\frac{3 \cdot \left(a \cdot c\right) + 0}{-\left(b + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1.5 \cdot \frac{a \cdot c}{b}}{3 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r118008 = b;
double r118009 = -r118008;
double r118010 = r118008 * r118008;
double r118011 = 3.0;
double r118012 = a;
double r118013 = r118011 * r118012;
double r118014 = c;
double r118015 = r118013 * r118014;
double r118016 = r118010 - r118015;
double r118017 = sqrt(r118016);
double r118018 = r118009 + r118017;
double r118019 = r118018 / r118013;
return r118019;
}
double f(double a, double b, double c) {
double r118020 = b;
double r118021 = -1.5694170650899903e+163;
bool r118022 = r118020 <= r118021;
double r118023 = 1.5;
double r118024 = a;
double r118025 = c;
double r118026 = r118024 * r118025;
double r118027 = r118026 / r118020;
double r118028 = r118023 * r118027;
double r118029 = 2.0;
double r118030 = r118029 * r118020;
double r118031 = r118028 - r118030;
double r118032 = 3.0;
double r118033 = r118032 * r118024;
double r118034 = r118031 / r118033;
double r118035 = 1.1928781235179368e-176;
bool r118036 = r118020 <= r118035;
double r118037 = -r118020;
double r118038 = r118020 * r118020;
double r118039 = r118033 * r118025;
double r118040 = r118038 - r118039;
double r118041 = sqrt(r118040);
double r118042 = r118037 + r118041;
double r118043 = r118042 / r118033;
double r118044 = 4.898816022123459e+152;
bool r118045 = r118020 <= r118044;
double r118046 = r118032 * r118026;
double r118047 = 0.0;
double r118048 = r118046 + r118047;
double r118049 = r118020 + r118041;
double r118050 = -r118049;
double r118051 = r118048 / r118050;
double r118052 = r118051 / r118033;
double r118053 = -1.5;
double r118054 = r118053 * r118027;
double r118055 = r118054 / r118033;
double r118056 = r118045 ? r118052 : r118055;
double r118057 = r118036 ? r118043 : r118056;
double r118058 = r118022 ? r118034 : r118057;
return r118058;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -1.5694170650899903e+163Initial program 64.0
rmApplied add-sqr-sqrt64.0
Applied sqrt-prod64.0
Taylor expanded around -inf 13.1
if -1.5694170650899903e+163 < b < 1.1928781235179368e-176Initial program 11.7
if 1.1928781235179368e-176 < b < 4.898816022123459e+152Initial program 38.9
rmApplied add-sqr-sqrt38.9
Applied sqrt-prod41.5
rmApplied flip-+41.5
Simplified15.9
Simplified15.8
if 4.898816022123459e+152 < b Initial program 63.8
Taylor expanded around inf 14.2
Final simplification13.5
herbie shell --seed 2020060
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))