\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\left(3 \cdot a\right) \cdot c}{-\left(\left(3 \cdot a\right) \cdot \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + \left(3 \cdot a\right) \cdot b\right)}double f(double a, double b, double c) {
double r58904 = b;
double r58905 = -r58904;
double r58906 = r58904 * r58904;
double r58907 = 3.0;
double r58908 = a;
double r58909 = r58907 * r58908;
double r58910 = c;
double r58911 = r58909 * r58910;
double r58912 = r58906 - r58911;
double r58913 = sqrt(r58912);
double r58914 = r58905 + r58913;
double r58915 = r58914 / r58909;
return r58915;
}
double f(double a, double b, double c) {
double r58916 = 3.0;
double r58917 = a;
double r58918 = r58916 * r58917;
double r58919 = c;
double r58920 = r58918 * r58919;
double r58921 = b;
double r58922 = r58921 * r58921;
double r58923 = r58922 - r58920;
double r58924 = sqrt(r58923);
double r58925 = r58918 * r58924;
double r58926 = r58918 * r58921;
double r58927 = r58925 + r58926;
double r58928 = -r58927;
double r58929 = r58920 / r58928;
return r58929;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.7
rmApplied flip-+28.6
Simplified0.5
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.4
rmApplied sub-neg0.4
Applied distribute-lft-in0.4
Final simplification0.4
herbie shell --seed 2019208
(FPCore (a b c)
:name "Cubic critical, narrow range"
:precision binary64
:pre (and (< 1.05367121277235087e-8 a 94906265.6242515594) (< 1.05367121277235087e-8 b 94906265.6242515594) (< 1.05367121277235087e-8 c 94906265.6242515594))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))