\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 -1.244774291407710824026233990502584030865 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 6.485606601696406255086078549712143397431 \cdot 10^{-71}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r241173 = b;
double r241174 = -r241173;
double r241175 = r241173 * r241173;
double r241176 = 4.0;
double r241177 = a;
double r241178 = r241176 * r241177;
double r241179 = c;
double r241180 = r241178 * r241179;
double r241181 = r241175 - r241180;
double r241182 = sqrt(r241181);
double r241183 = r241174 + r241182;
double r241184 = 2.0;
double r241185 = r241184 * r241177;
double r241186 = r241183 / r241185;
return r241186;
}
double f(double a, double b, double c) {
double r241187 = b;
double r241188 = -1.2447742914077108e+109;
bool r241189 = r241187 <= r241188;
double r241190 = 1.0;
double r241191 = c;
double r241192 = r241191 / r241187;
double r241193 = a;
double r241194 = r241187 / r241193;
double r241195 = r241192 - r241194;
double r241196 = r241190 * r241195;
double r241197 = 6.485606601696406e-71;
bool r241198 = r241187 <= r241197;
double r241199 = -r241187;
double r241200 = r241187 * r241187;
double r241201 = 4.0;
double r241202 = r241201 * r241193;
double r241203 = r241202 * r241191;
double r241204 = r241200 - r241203;
double r241205 = sqrt(r241204);
double r241206 = r241199 + r241205;
double r241207 = 1.0;
double r241208 = 2.0;
double r241209 = r241208 * r241193;
double r241210 = r241207 / r241209;
double r241211 = r241206 * r241210;
double r241212 = -1.0;
double r241213 = r241212 * r241192;
double r241214 = r241198 ? r241211 : r241213;
double r241215 = r241189 ? r241196 : r241214;
return r241215;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.7 |
|---|---|
| Target | 21.5 |
| Herbie | 10.1 |
if b < -1.2447742914077108e+109Initial program 49.3
Taylor expanded around -inf 4.0
Simplified4.0
if -1.2447742914077108e+109 < b < 6.485606601696406e-71Initial program 13.5
rmApplied div-inv13.6
if 6.485606601696406e-71 < b Initial program 53.3
Taylor expanded around inf 8.4
Final simplification10.1
herbie shell --seed 2019353 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:precision binary64
:herbie-target
(if (< b 0.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)))