\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{1}{\frac{\sqrt{\mathsf{fma}\left(3 \cdot \left(-a\right), c, {b}^{2}\right)} + b}{c} \cdot \frac{a \cdot 3}{3 \cdot \left(-a\right)}}double f(double a, double b, double c) {
double r98859 = b;
double r98860 = -r98859;
double r98861 = r98859 * r98859;
double r98862 = 3.0;
double r98863 = a;
double r98864 = r98862 * r98863;
double r98865 = c;
double r98866 = r98864 * r98865;
double r98867 = r98861 - r98866;
double r98868 = sqrt(r98867);
double r98869 = r98860 + r98868;
double r98870 = r98869 / r98864;
return r98870;
}
double f(double a, double b, double c) {
double r98871 = 1.0;
double r98872 = 3.0;
double r98873 = a;
double r98874 = -r98873;
double r98875 = r98872 * r98874;
double r98876 = c;
double r98877 = b;
double r98878 = 2.0;
double r98879 = pow(r98877, r98878);
double r98880 = fma(r98875, r98876, r98879);
double r98881 = sqrt(r98880);
double r98882 = r98881 + r98877;
double r98883 = r98882 / r98876;
double r98884 = r98873 * r98872;
double r98885 = r98884 / r98875;
double r98886 = r98883 * r98885;
double r98887 = r98871 / r98886;
return r98887;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 52.6
Simplified52.6
rmApplied flip--52.6
Simplified0.5
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied associate-/l*0.6
Simplified0.3
Final simplification0.3
herbie shell --seed 2019179 +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.0 a) c)))) (* 3.0 a)))