\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{1}{\frac{a \cdot 3}{-a \cdot 3} \cdot \frac{b + \sqrt{\mathsf{fma}\left(b, b, \left(a \cdot c\right) \cdot \left(-3\right)\right)}}{c}}double f(double a, double b, double c) {
double r108096 = b;
double r108097 = -r108096;
double r108098 = r108096 * r108096;
double r108099 = 3.0;
double r108100 = a;
double r108101 = r108099 * r108100;
double r108102 = c;
double r108103 = r108101 * r108102;
double r108104 = r108098 - r108103;
double r108105 = sqrt(r108104);
double r108106 = r108097 + r108105;
double r108107 = r108106 / r108101;
return r108107;
}
double f(double a, double b, double c) {
double r108108 = 1.0;
double r108109 = a;
double r108110 = 3.0;
double r108111 = r108109 * r108110;
double r108112 = -r108111;
double r108113 = r108111 / r108112;
double r108114 = b;
double r108115 = c;
double r108116 = r108109 * r108115;
double r108117 = -r108110;
double r108118 = r108116 * r108117;
double r108119 = fma(r108114, r108114, r108118);
double r108120 = sqrt(r108119);
double r108121 = r108114 + r108120;
double r108122 = r108121 / r108115;
double r108123 = r108113 * r108122;
double r108124 = r108108 / r108123;
return r108124;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 28.4
Simplified28.4
rmApplied flip--28.4
Simplified0.6
Simplified0.6
rmApplied *-un-lft-identity0.6
Applied *-un-lft-identity0.6
Applied times-frac0.6
Applied associate-/l*0.6
Simplified0.4
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019194 +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)))