\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{c}{(\left(\sqrt{b}\right) \cdot \left(-\sqrt{b}\right) + \left(-\sqrt{(\left(a \cdot -3\right) \cdot c + \left(b \cdot b\right))_*}\right))_*}double f(double a, double b, double c, double __attribute__((unused)) d) {
double r27647116 = b;
double r27647117 = -r27647116;
double r27647118 = r27647116 * r27647116;
double r27647119 = 3.0;
double r27647120 = a;
double r27647121 = r27647119 * r27647120;
double r27647122 = c;
double r27647123 = r27647121 * r27647122;
double r27647124 = r27647118 - r27647123;
double r27647125 = sqrt(r27647124);
double r27647126 = r27647117 + r27647125;
double r27647127 = r27647126 / r27647121;
return r27647127;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r27647128 = c;
double r27647129 = b;
double r27647130 = sqrt(r27647129);
double r27647131 = -r27647130;
double r27647132 = a;
double r27647133 = -3.0;
double r27647134 = r27647132 * r27647133;
double r27647135 = r27647129 * r27647129;
double r27647136 = fma(r27647134, r27647128, r27647135);
double r27647137 = sqrt(r27647136);
double r27647138 = -r27647137;
double r27647139 = fma(r27647130, r27647131, r27647138);
double r27647140 = r27647128 / r27647139;
return r27647140;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
Initial program 28.8
rmApplied flip-+28.8
Applied associate-/l/28.8
Simplified0.6
rmApplied associate-*l*0.6
rmApplied times-frac0.5
Simplified0.5
Simplified0.3
rmApplied add-sqr-sqrt0.4
Applied distribute-rgt-neg-in0.4
Applied fma-neg0.3
Final simplification0.3
herbie shell --seed 2019119 +o rules:numerics
(FPCore (a b c d)
: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 a) c)))) (* 3 a)))