\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r99812 = b;
double r99813 = -r99812;
double r99814 = r99812 * r99812;
double r99815 = 3.0;
double r99816 = a;
double r99817 = r99815 * r99816;
double r99818 = c;
double r99819 = r99817 * r99818;
double r99820 = r99814 - r99819;
double r99821 = sqrt(r99820);
double r99822 = r99813 + r99821;
double r99823 = r99822 / r99817;
return r99823;
}
double f(double a, double b, double c) {
double r99824 = c;
double r99825 = b;
double r99826 = -r99825;
double r99827 = r99825 * r99825;
double r99828 = 3.0;
double r99829 = a;
double r99830 = r99828 * r99829;
double r99831 = r99830 * r99824;
double r99832 = r99827 - r99831;
double r99833 = sqrt(r99832);
double r99834 = r99826 - r99833;
double r99835 = r99824 / r99834;
return r99835;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 44.0
rmApplied flip-+44.0
Simplified0.6
rmApplied div-inv0.6
Applied times-frac0.5
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied associate-*l*0.5
Simplified0.5
Final simplification0.2
herbie shell --seed 2019294
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e15) (< 1.11022e-16 b 9.0072e15) (< 1.11022e-16 c 9.0072e15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))