\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}-2 \cdot \frac{c}{(\left(\sqrt{b}\right) \cdot \left(\sqrt{b}\right) + \left(\sqrt{(b \cdot b + \left(-4 \cdot \left(c \cdot a\right)\right))_*}\right))_*}double f(double a, double b, double c) {
double r9477111 = b;
double r9477112 = -r9477111;
double r9477113 = r9477111 * r9477111;
double r9477114 = 4.0;
double r9477115 = a;
double r9477116 = r9477114 * r9477115;
double r9477117 = c;
double r9477118 = r9477116 * r9477117;
double r9477119 = r9477113 - r9477118;
double r9477120 = sqrt(r9477119);
double r9477121 = r9477112 + r9477120;
double r9477122 = 2.0;
double r9477123 = r9477122 * r9477115;
double r9477124 = r9477121 / r9477123;
return r9477124;
}
double f(double a, double b, double c) {
double r9477125 = -2.0;
double r9477126 = c;
double r9477127 = b;
double r9477128 = sqrt(r9477127);
double r9477129 = -4.0;
double r9477130 = a;
double r9477131 = r9477126 * r9477130;
double r9477132 = r9477129 * r9477131;
double r9477133 = fma(r9477127, r9477127, r9477132);
double r9477134 = sqrt(r9477133);
double r9477135 = fma(r9477128, r9477128, r9477134);
double r9477136 = r9477126 / r9477135;
double r9477137 = r9477125 * r9477136;
return r9477137;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 28.9
Simplified28.9
rmApplied flip--29.0
Taylor expanded around 0 0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.3
rmApplied add-sqr-sqrt0.4
Applied fma-def0.3
Final simplification0.3
herbie shell --seed 2019119 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, 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) (* (* 4 a) c)))) (* 2 a)))