\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{4 \cdot \left(a \cdot c\right)}{-a \cdot \left(b + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r32006 = b;
double r32007 = -r32006;
double r32008 = r32006 * r32006;
double r32009 = 4.0;
double r32010 = a;
double r32011 = r32009 * r32010;
double r32012 = c;
double r32013 = r32011 * r32012;
double r32014 = r32008 - r32013;
double r32015 = sqrt(r32014);
double r32016 = r32007 + r32015;
double r32017 = 2.0;
double r32018 = r32017 * r32010;
double r32019 = r32016 / r32018;
return r32019;
}
double f(double a, double b, double c) {
double r32020 = 1.0;
double r32021 = 2.0;
double r32022 = r32020 / r32021;
double r32023 = 4.0;
double r32024 = a;
double r32025 = c;
double r32026 = r32024 * r32025;
double r32027 = r32023 * r32026;
double r32028 = b;
double r32029 = r32028 * r32028;
double r32030 = r32023 * r32024;
double r32031 = r32030 * r32025;
double r32032 = r32029 - r32031;
double r32033 = sqrt(r32032);
double r32034 = r32028 + r32033;
double r32035 = r32024 * r32034;
double r32036 = -r32035;
double r32037 = r32027 / r32036;
double r32038 = r32022 * r32037;
return r32038;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 43.7
rmApplied flip-+43.6
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.4
rmApplied sub-neg0.4
Applied distribute-lft-in0.4
Simplified0.4
rmApplied distribute-rgt-neg-out0.4
Applied mul-1-neg0.4
Applied distribute-neg-out0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019344
(FPCore (a b c)
:name "Quadratic roots, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e+15) (< 1.11022e-16 b 9.0072e+15) (< 1.11022e-16 c 9.0072e+15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))