\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -2.9862044966069494 \cdot 10^{+41}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 1.990519652731023 \cdot 10^{-106}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\left(c \cdot a\right) \cdot -4 + b \cdot b}}{a \cdot 2}\\
\mathbf{elif}\;b \le 1.0350377446088803 \cdot 10^{-69}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 3.325219738594455 \cdot 10^{-21}:\\
\;\;\;\;\frac{\frac{b \cdot b - \left(\left(c \cdot a\right) \cdot -4 + b \cdot b\right)}{\left(-b\right) - \sqrt{\left(c \cdot a\right) \cdot -4 + b \cdot b}}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r4478161 = b;
double r4478162 = -r4478161;
double r4478163 = r4478161 * r4478161;
double r4478164 = 4.0;
double r4478165 = a;
double r4478166 = r4478164 * r4478165;
double r4478167 = c;
double r4478168 = r4478166 * r4478167;
double r4478169 = r4478163 - r4478168;
double r4478170 = sqrt(r4478169);
double r4478171 = r4478162 + r4478170;
double r4478172 = 2.0;
double r4478173 = r4478172 * r4478165;
double r4478174 = r4478171 / r4478173;
return r4478174;
}
double f(double a, double b, double c) {
double r4478175 = b;
double r4478176 = -2.9862044966069494e+41;
bool r4478177 = r4478175 <= r4478176;
double r4478178 = c;
double r4478179 = r4478178 / r4478175;
double r4478180 = a;
double r4478181 = r4478175 / r4478180;
double r4478182 = r4478179 - r4478181;
double r4478183 = 1.990519652731023e-106;
bool r4478184 = r4478175 <= r4478183;
double r4478185 = -r4478175;
double r4478186 = r4478178 * r4478180;
double r4478187 = -4.0;
double r4478188 = r4478186 * r4478187;
double r4478189 = r4478175 * r4478175;
double r4478190 = r4478188 + r4478189;
double r4478191 = sqrt(r4478190);
double r4478192 = r4478185 + r4478191;
double r4478193 = 2.0;
double r4478194 = r4478180 * r4478193;
double r4478195 = r4478192 / r4478194;
double r4478196 = 1.0350377446088803e-69;
bool r4478197 = r4478175 <= r4478196;
double r4478198 = -r4478179;
double r4478199 = 3.325219738594455e-21;
bool r4478200 = r4478175 <= r4478199;
double r4478201 = r4478189 - r4478190;
double r4478202 = r4478185 - r4478191;
double r4478203 = r4478201 / r4478202;
double r4478204 = r4478203 / r4478194;
double r4478205 = r4478200 ? r4478204 : r4478198;
double r4478206 = r4478197 ? r4478198 : r4478205;
double r4478207 = r4478184 ? r4478195 : r4478206;
double r4478208 = r4478177 ? r4478182 : r4478207;
return r4478208;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.0 |
|---|---|
| Target | 20.1 |
| Herbie | 10.8 |
if b < -2.9862044966069494e+41Initial program 34.1
Taylor expanded around -inf 6.3
if -2.9862044966069494e+41 < b < 1.990519652731023e-106Initial program 12.8
Taylor expanded around 0 12.8
Simplified12.8
if 1.990519652731023e-106 < b < 1.0350377446088803e-69 or 3.325219738594455e-21 < b Initial program 53.1
Taylor expanded around inf 8.7
Simplified8.7
if 1.0350377446088803e-69 < b < 3.325219738594455e-21Initial program 35.7
Taylor expanded around 0 35.5
Simplified35.5
rmApplied flip-+35.6
Simplified35.6
Simplified35.6
Final simplification10.8
herbie shell --seed 2019164
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))