\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}-0.5 \cdot \frac{c}{b}double f(double a, double b, double c) {
double r88350 = b;
double r88351 = -r88350;
double r88352 = r88350 * r88350;
double r88353 = 3.0;
double r88354 = a;
double r88355 = r88353 * r88354;
double r88356 = c;
double r88357 = r88355 * r88356;
double r88358 = r88352 - r88357;
double r88359 = sqrt(r88358);
double r88360 = r88351 + r88359;
double r88361 = r88360 / r88355;
return r88361;
}
double f(double __attribute__((unused)) a, double b, double c) {
double r88362 = -0.5;
double r88363 = c;
double r88364 = b;
double r88365 = r88363 / r88364;
double r88366 = r88362 * r88365;
return r88366;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.7
Simplified52.7
Taylor expanded around inf 6.1
Final simplification6.1
herbie shell --seed 2019304 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, wide range"
:precision binary64
:pre (and (< 4.93038e-32 a 2.02824e31) (< 4.93038e-32 b 2.02824e31) (< 4.93038e-32 c 2.02824e31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))