\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 -4.739386840053888999010128333992752158317 \cdot 10^{131}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -2.102308624562260429751103075089775725609 \cdot 10^{-293}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{elif}\;b \le 6.092401246928180338651406165764155275885 \cdot 10^{90}:\\
\;\;\;\;\frac{1}{\left(\frac{2}{4} \cdot \frac{1}{c}\right) \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r160374 = b;
double r160375 = -r160374;
double r160376 = r160374 * r160374;
double r160377 = 4.0;
double r160378 = a;
double r160379 = r160377 * r160378;
double r160380 = c;
double r160381 = r160379 * r160380;
double r160382 = r160376 - r160381;
double r160383 = sqrt(r160382);
double r160384 = r160375 + r160383;
double r160385 = 2.0;
double r160386 = r160385 * r160378;
double r160387 = r160384 / r160386;
return r160387;
}
double f(double a, double b, double c) {
double r160388 = b;
double r160389 = -4.739386840053889e+131;
bool r160390 = r160388 <= r160389;
double r160391 = 1.0;
double r160392 = c;
double r160393 = r160392 / r160388;
double r160394 = a;
double r160395 = r160388 / r160394;
double r160396 = r160393 - r160395;
double r160397 = r160391 * r160396;
double r160398 = -2.1023086245622604e-293;
bool r160399 = r160388 <= r160398;
double r160400 = -r160388;
double r160401 = r160388 * r160388;
double r160402 = 4.0;
double r160403 = r160402 * r160394;
double r160404 = r160403 * r160392;
double r160405 = r160401 - r160404;
double r160406 = sqrt(r160405);
double r160407 = r160400 + r160406;
double r160408 = 1.0;
double r160409 = 2.0;
double r160410 = r160409 * r160394;
double r160411 = r160408 / r160410;
double r160412 = r160407 * r160411;
double r160413 = 6.09240124692818e+90;
bool r160414 = r160388 <= r160413;
double r160415 = r160409 / r160402;
double r160416 = r160408 / r160392;
double r160417 = r160415 * r160416;
double r160418 = r160400 - r160406;
double r160419 = r160417 * r160418;
double r160420 = r160408 / r160419;
double r160421 = -1.0;
double r160422 = r160421 * r160393;
double r160423 = r160414 ? r160420 : r160422;
double r160424 = r160399 ? r160412 : r160423;
double r160425 = r160390 ? r160397 : r160424;
return r160425;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.2 |
|---|---|
| Target | 21.2 |
| Herbie | 6.7 |
if b < -4.739386840053889e+131Initial program 55.7
Taylor expanded around -inf 2.4
Simplified2.4
if -4.739386840053889e+131 < b < -2.1023086245622604e-293Initial program 9.2
rmApplied div-inv9.4
if -2.1023086245622604e-293 < b < 6.09240124692818e+90Initial program 31.3
rmApplied flip-+31.3
Simplified16.0
rmApplied *-un-lft-identity16.0
Applied *-un-lft-identity16.0
Applied times-frac16.0
Applied associate-/l*16.2
Simplified15.6
rmApplied times-frac15.6
Simplified8.8
if 6.09240124692818e+90 < b Initial program 59.2
Taylor expanded around inf 3.0
Final simplification6.7
herbie shell --seed 2019354
(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)))