\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 -5.86823424460126 \cdot 10^{+153}:\\
\;\;\;\;\frac{(\frac{3}{2} \cdot \left(\frac{a}{\frac{b}{c}}\right) + \left(b \cdot -2\right))_*}{3 \cdot a}\\
\mathbf{elif}\;b \le 1.5222805660690795 \cdot 10^{-59}:\\
\;\;\;\;\frac{\left|\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right| + \left(-b\right)}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{-3}{2} \cdot \frac{a \cdot c}{b}}{3 \cdot a}\\
\end{array}double f(double a, double b, double c, double __attribute__((unused)) d) {
double r20049082 = b;
double r20049083 = -r20049082;
double r20049084 = r20049082 * r20049082;
double r20049085 = 3.0;
double r20049086 = a;
double r20049087 = r20049085 * r20049086;
double r20049088 = c;
double r20049089 = r20049087 * r20049088;
double r20049090 = r20049084 - r20049089;
double r20049091 = sqrt(r20049090);
double r20049092 = r20049083 + r20049091;
double r20049093 = r20049092 / r20049087;
return r20049093;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r20049094 = b;
double r20049095 = -5.86823424460126e+153;
bool r20049096 = r20049094 <= r20049095;
double r20049097 = 1.5;
double r20049098 = a;
double r20049099 = c;
double r20049100 = r20049094 / r20049099;
double r20049101 = r20049098 / r20049100;
double r20049102 = -2.0;
double r20049103 = r20049094 * r20049102;
double r20049104 = fma(r20049097, r20049101, r20049103);
double r20049105 = 3.0;
double r20049106 = r20049105 * r20049098;
double r20049107 = r20049104 / r20049106;
double r20049108 = 1.5222805660690795e-59;
bool r20049109 = r20049094 <= r20049108;
double r20049110 = r20049094 * r20049094;
double r20049111 = r20049106 * r20049099;
double r20049112 = r20049110 - r20049111;
double r20049113 = sqrt(r20049112);
double r20049114 = fabs(r20049113);
double r20049115 = -r20049094;
double r20049116 = r20049114 + r20049115;
double r20049117 = r20049116 / r20049106;
double r20049118 = -1.5;
double r20049119 = r20049098 * r20049099;
double r20049120 = r20049119 / r20049094;
double r20049121 = r20049118 * r20049120;
double r20049122 = r20049121 / r20049106;
double r20049123 = r20049109 ? r20049117 : r20049122;
double r20049124 = r20049096 ? r20049107 : r20049123;
return r20049124;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
if b < -5.86823424460126e+153Initial program 60.8
Taylor expanded around -inf 11.6
Simplified3.2
if -5.86823424460126e+153 < b < 1.5222805660690795e-59Initial program 12.5
rmApplied add-cube-cbrt12.8
rmApplied add-sqr-sqrt12.8
Applied rem-sqrt-square12.8
Simplified12.5
if 1.5222805660690795e-59 < b Initial program 53.0
Taylor expanded around inf 18.8
Final simplification13.8
herbie shell --seed 2019119 +o rules:numerics
(FPCore (a b c d)
:name "Cubic critical"
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))