\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -1.8774910265390396 \cdot 10^{-73}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\mathbf{elif}\;b \le 2.5703497435733685 \cdot 10^{+102}:\\
\;\;\;\;\frac{\frac{1}{\frac{1}{\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}}{a}}}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\end{array}double f(double a, double b, double c) {
double r1469290 = b;
double r1469291 = -r1469290;
double r1469292 = r1469290 * r1469290;
double r1469293 = 4.0;
double r1469294 = a;
double r1469295 = c;
double r1469296 = r1469294 * r1469295;
double r1469297 = r1469293 * r1469296;
double r1469298 = r1469292 - r1469297;
double r1469299 = sqrt(r1469298);
double r1469300 = r1469291 - r1469299;
double r1469301 = 2.0;
double r1469302 = r1469301 * r1469294;
double r1469303 = r1469300 / r1469302;
return r1469303;
}
double f(double a, double b, double c) {
double r1469304 = b;
double r1469305 = -1.8774910265390396e-73;
bool r1469306 = r1469304 <= r1469305;
double r1469307 = -2.0;
double r1469308 = c;
double r1469309 = r1469308 / r1469304;
double r1469310 = r1469307 * r1469309;
double r1469311 = 2.0;
double r1469312 = r1469310 / r1469311;
double r1469313 = 2.5703497435733685e+102;
bool r1469314 = r1469304 <= r1469313;
double r1469315 = 1.0;
double r1469316 = -r1469304;
double r1469317 = a;
double r1469318 = -4.0;
double r1469319 = r1469317 * r1469318;
double r1469320 = r1469304 * r1469304;
double r1469321 = fma(r1469319, r1469308, r1469320);
double r1469322 = sqrt(r1469321);
double r1469323 = r1469316 - r1469322;
double r1469324 = r1469323 / r1469317;
double r1469325 = r1469315 / r1469324;
double r1469326 = r1469315 / r1469325;
double r1469327 = r1469326 / r1469311;
double r1469328 = r1469304 / r1469317;
double r1469329 = r1469309 - r1469328;
double r1469330 = r1469329 * r1469311;
double r1469331 = r1469330 / r1469311;
double r1469332 = r1469314 ? r1469327 : r1469331;
double r1469333 = r1469306 ? r1469312 : r1469332;
return r1469333;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.2 |
|---|---|
| Target | 20.4 |
| Herbie | 9.9 |
if b < -1.8774910265390396e-73Initial program 52.5
Simplified52.5
rmApplied *-un-lft-identity52.5
Applied *-un-lft-identity52.5
Applied distribute-lft-out--52.5
Applied associate-/l*52.5
rmApplied *-un-lft-identity52.5
Applied associate-/l*52.5
Taylor expanded around -inf 8.6
if -1.8774910265390396e-73 < b < 2.5703497435733685e+102Initial program 13.1
Simplified13.1
rmApplied *-un-lft-identity13.1
Applied *-un-lft-identity13.1
Applied distribute-lft-out--13.1
Applied associate-/l*13.2
rmApplied *-un-lft-identity13.2
Applied associate-/l*13.2
if 2.5703497435733685e+102 < b Initial program 43.9
Simplified43.9
Taylor expanded around inf 3.0
Simplified3.0
Final simplification9.9
herbie shell --seed 2019153 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))