\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.269895755919419994119426060411821031835 \cdot 10^{99}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le 5.480131987291899458594157601719520740479 \cdot 10^{-168}:\\
\;\;\;\;\left(\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b\right) \cdot \frac{1}{3 \cdot a}\\
\mathbf{elif}\;b \le 6.194358139220983814753525365719850242403 \cdot 10^{-110} \lor \neg \left(b \le 1.846537578115044209159378851836663670838 \cdot 10^{-4}\right):\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{b \cdot b - \mathsf{fma}\left(b, b, \left(3 \cdot a\right) \cdot c\right)}{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + b}}{3 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r113059 = b;
double r113060 = -r113059;
double r113061 = r113059 * r113059;
double r113062 = 3.0;
double r113063 = a;
double r113064 = r113062 * r113063;
double r113065 = c;
double r113066 = r113064 * r113065;
double r113067 = r113061 - r113066;
double r113068 = sqrt(r113067);
double r113069 = r113060 + r113068;
double r113070 = r113069 / r113064;
return r113070;
}
double f(double a, double b, double c) {
double r113071 = b;
double r113072 = -1.26989575591942e+99;
bool r113073 = r113071 <= r113072;
double r113074 = 0.5;
double r113075 = c;
double r113076 = r113075 / r113071;
double r113077 = r113074 * r113076;
double r113078 = 0.6666666666666666;
double r113079 = a;
double r113080 = r113071 / r113079;
double r113081 = r113078 * r113080;
double r113082 = r113077 - r113081;
double r113083 = 5.480131987291899e-168;
bool r113084 = r113071 <= r113083;
double r113085 = r113071 * r113071;
double r113086 = 3.0;
double r113087 = r113086 * r113079;
double r113088 = r113087 * r113075;
double r113089 = r113085 - r113088;
double r113090 = sqrt(r113089);
double r113091 = r113090 - r113071;
double r113092 = 1.0;
double r113093 = r113092 / r113087;
double r113094 = r113091 * r113093;
double r113095 = 6.194358139220984e-110;
bool r113096 = r113071 <= r113095;
double r113097 = 0.00018465375781150442;
bool r113098 = r113071 <= r113097;
double r113099 = !r113098;
bool r113100 = r113096 || r113099;
double r113101 = -0.5;
double r113102 = r113101 * r113076;
double r113103 = fma(r113071, r113071, r113088);
double r113104 = r113085 - r113103;
double r113105 = r113090 + r113071;
double r113106 = r113104 / r113105;
double r113107 = r113106 / r113087;
double r113108 = r113100 ? r113102 : r113107;
double r113109 = r113084 ? r113094 : r113108;
double r113110 = r113073 ? r113082 : r113109;
return r113110;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -1.26989575591942e+99Initial program 46.5
Simplified46.5
Taylor expanded around -inf 4.4
if -1.26989575591942e+99 < b < 5.480131987291899e-168Initial program 10.3
Simplified10.3
rmApplied div-inv10.4
if 5.480131987291899e-168 < b < 6.194358139220984e-110 or 0.00018465375781150442 < b Initial program 51.7
Simplified51.7
Taylor expanded around inf 10.4
if 6.194358139220984e-110 < b < 0.00018465375781150442Initial program 34.6
Simplified34.6
rmApplied flip--34.6
Simplified34.7
Final simplification11.5
herbie shell --seed 2019350 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))