\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{1}{\frac{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 3} + b}{c} \cdot \frac{3 \cdot a}{\left(-3\right) \cdot a}}double f(double a, double b, double c) {
double r94623 = b;
double r94624 = -r94623;
double r94625 = r94623 * r94623;
double r94626 = 3.0;
double r94627 = a;
double r94628 = r94626 * r94627;
double r94629 = c;
double r94630 = r94628 * r94629;
double r94631 = r94625 - r94630;
double r94632 = sqrt(r94631);
double r94633 = r94624 + r94632;
double r94634 = r94633 / r94628;
return r94634;
}
double f(double a, double b, double c) {
double r94635 = 1.0;
double r94636 = b;
double r94637 = r94636 * r94636;
double r94638 = c;
double r94639 = a;
double r94640 = r94638 * r94639;
double r94641 = 3.0;
double r94642 = r94640 * r94641;
double r94643 = r94637 - r94642;
double r94644 = sqrt(r94643);
double r94645 = r94644 + r94636;
double r94646 = r94645 / r94638;
double r94647 = r94641 * r94639;
double r94648 = -r94641;
double r94649 = r94648 * r94639;
double r94650 = r94647 / r94649;
double r94651 = r94646 * r94650;
double r94652 = r94635 / r94651;
return r94652;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.2
Simplified28.2
rmApplied flip--28.2
Simplified0.6
Simplified0.6
rmApplied div-inv0.6
Applied associate-/l*0.6
Simplified0.6
rmApplied pow10.6
Applied pow10.6
Applied pow10.6
Applied pow-prod-down0.6
Applied pow-prod-down0.6
Simplified0.6
rmApplied clear-num0.6
Simplified0.4
Final simplification0.4
herbie shell --seed 2019179 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, narrow range"
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)))