\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\mathsf{expm1}\left(\mathsf{log1p}\left(\sqrt[3]{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right)}\right)\right)}{\frac{3 \cdot a}{\sqrt[3]{\sqrt[3]{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right)} \cdot \left(\sqrt[3]{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right)}\right)}}}double f(double a, double b, double c) {
double r1418154 = b;
double r1418155 = -r1418154;
double r1418156 = r1418154 * r1418154;
double r1418157 = 3.0;
double r1418158 = a;
double r1418159 = r1418157 * r1418158;
double r1418160 = c;
double r1418161 = r1418159 * r1418160;
double r1418162 = r1418156 - r1418161;
double r1418163 = sqrt(r1418162);
double r1418164 = r1418155 + r1418163;
double r1418165 = r1418164 / r1418159;
return r1418165;
}
double f(double a, double b, double c) {
double r1418166 = -3.0;
double r1418167 = a;
double r1418168 = c;
double r1418169 = r1418167 * r1418168;
double r1418170 = b;
double r1418171 = r1418170 * r1418170;
double r1418172 = fma(r1418166, r1418169, r1418171);
double r1418173 = sqrt(r1418172);
double r1418174 = sqrt(r1418173);
double r1418175 = -r1418170;
double r1418176 = fma(r1418174, r1418174, r1418175);
double r1418177 = cbrt(r1418176);
double r1418178 = r1418177 * r1418177;
double r1418179 = log1p(r1418178);
double r1418180 = expm1(r1418179);
double r1418181 = 3.0;
double r1418182 = r1418181 * r1418167;
double r1418183 = r1418177 * r1418178;
double r1418184 = cbrt(r1418183);
double r1418185 = r1418182 / r1418184;
double r1418186 = r1418180 / r1418185;
return r1418186;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 52.7
Simplified52.7
rmApplied add-sqr-sqrt52.7
Applied sqrt-prod52.5
Applied fma-neg51.9
rmApplied add-cube-cbrt51.9
Applied associate-/l*51.9
rmApplied expm1-log1p-u51.9
rmApplied add-cube-cbrt51.9
Final simplification51.9
herbie shell --seed 2019155 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, wide range"
:pre (and (< 4.930380657631324e-32 a 2.028240960365167e+31) (< 4.930380657631324e-32 b 2.028240960365167e+31) (< 4.930380657631324e-32 c 2.028240960365167e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))