\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 -3.22069661098510164 \cdot 10^{150}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.66666666666666663 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le 2.6814156115033013 \cdot 10^{-110}:\\
\;\;\;\;\frac{1}{\frac{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 r101169 = b;
double r101170 = -r101169;
double r101171 = r101169 * r101169;
double r101172 = 3.0;
double r101173 = a;
double r101174 = r101172 * r101173;
double r101175 = c;
double r101176 = r101174 * r101175;
double r101177 = r101171 - r101176;
double r101178 = sqrt(r101177);
double r101179 = r101170 + r101178;
double r101180 = r101179 / r101174;
return r101180;
}
double f(double a, double b, double c) {
double r101181 = b;
double r101182 = -3.2206966109851016e+150;
bool r101183 = r101181 <= r101182;
double r101184 = 0.5;
double r101185 = c;
double r101186 = r101185 / r101181;
double r101187 = r101184 * r101186;
double r101188 = 0.6666666666666666;
double r101189 = a;
double r101190 = r101181 / r101189;
double r101191 = r101188 * r101190;
double r101192 = r101187 - r101191;
double r101193 = 2.6814156115033013e-110;
bool r101194 = r101181 <= r101193;
double r101195 = 1.0;
double r101196 = 3.0;
double r101197 = r101196 * r101189;
double r101198 = -r101181;
double r101199 = r101181 * r101181;
double r101200 = r101197 * r101185;
double r101201 = r101199 - r101200;
double r101202 = sqrt(r101201);
double r101203 = r101198 + r101202;
double r101204 = r101197 / r101203;
double r101205 = r101195 / r101204;
double r101206 = -0.5;
double r101207 = r101206 * r101186;
double r101208 = r101194 ? r101205 : r101207;
double r101209 = r101183 ? r101192 : r101208;
return r101209;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -3.2206966109851016e+150Initial program 62.4
Taylor expanded around -inf 2.6
if -3.2206966109851016e+150 < b < 2.6814156115033013e-110Initial program 11.7
rmApplied clear-num11.7
if 2.6814156115033013e-110 < b Initial program 52.0
Taylor expanded around inf 10.7
Final simplification10.2
herbie shell --seed 2020020 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))