\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{4 \cdot \left(a \cdot c\right)}{-\left(b \cdot a + a \cdot \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)} \cdot \frac{1}{2}double f(double a, double b, double c) {
double r44062 = b;
double r44063 = -r44062;
double r44064 = r44062 * r44062;
double r44065 = 4.0;
double r44066 = a;
double r44067 = r44065 * r44066;
double r44068 = c;
double r44069 = r44067 * r44068;
double r44070 = r44064 - r44069;
double r44071 = sqrt(r44070);
double r44072 = r44063 + r44071;
double r44073 = 2.0;
double r44074 = r44073 * r44066;
double r44075 = r44072 / r44074;
return r44075;
}
double f(double a, double b, double c) {
double r44076 = 4.0;
double r44077 = a;
double r44078 = c;
double r44079 = r44077 * r44078;
double r44080 = r44076 * r44079;
double r44081 = b;
double r44082 = r44081 * r44077;
double r44083 = r44081 * r44081;
double r44084 = r44076 * r44077;
double r44085 = r44084 * r44078;
double r44086 = r44083 - r44085;
double r44087 = sqrt(r44086);
double r44088 = r44077 * r44087;
double r44089 = r44082 + r44088;
double r44090 = -r44089;
double r44091 = r44080 / r44090;
double r44092 = 1.0;
double r44093 = 2.0;
double r44094 = r44092 / r44093;
double r44095 = r44091 * r44094;
return r44095;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.8
rmApplied flip-+28.9
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
Final simplification0.4
herbie shell --seed 2020043
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:precision binary64
: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)))