\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{3 \cdot \frac{c}{3}}{\left(-b\right) - \sqrt{b \cdot b - c \cdot \left(3 \cdot a\right)}}double f(double a, double b, double c, double __attribute__((unused)) d) {
double r18397876 = b;
double r18397877 = -r18397876;
double r18397878 = r18397876 * r18397876;
double r18397879 = 3.0;
double r18397880 = a;
double r18397881 = r18397879 * r18397880;
double r18397882 = c;
double r18397883 = r18397881 * r18397882;
double r18397884 = r18397878 - r18397883;
double r18397885 = sqrt(r18397884);
double r18397886 = r18397877 + r18397885;
double r18397887 = r18397886 / r18397881;
return r18397887;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r18397888 = 3.0;
double r18397889 = c;
double r18397890 = r18397889 / r18397888;
double r18397891 = r18397888 * r18397890;
double r18397892 = b;
double r18397893 = -r18397892;
double r18397894 = r18397892 * r18397892;
double r18397895 = a;
double r18397896 = r18397888 * r18397895;
double r18397897 = r18397889 * r18397896;
double r18397898 = r18397894 - r18397897;
double r18397899 = sqrt(r18397898);
double r18397900 = r18397893 - r18397899;
double r18397901 = r18397891 / r18397900;
return r18397901;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
Results
Initial program 43.9
rmApplied flip-+43.9
Applied associate-/l/43.9
Simplified0.5
rmApplied associate-/l*0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Simplified0.5
Simplified0.2
rmApplied times-frac0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2019112 +o rules:numerics
(FPCore (a b c d)
:name "Cubic critical, medium range"
:pre (and (< 1.1102230246251565e-16 a 9007199254740992.0) (< 1.1102230246251565e-16 b 9007199254740992.0) (< 1.1102230246251565e-16 c 9007199254740992.0))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))