\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 r210481 = b;
double r210482 = -r210481;
double r210483 = r210481 * r210481;
double r210484 = 4.0;
double r210485 = a;
double r210486 = r210484 * r210485;
double r210487 = c;
double r210488 = r210486 * r210487;
double r210489 = r210483 - r210488;
double r210490 = sqrt(r210489);
double r210491 = r210482 + r210490;
double r210492 = 2.0;
double r210493 = r210492 * r210485;
double r210494 = r210491 / r210493;
return r210494;
}
double f(double a, double b, double c) {
double r210495 = b;
double r210496 = -1.2447742914077108e+109;
bool r210497 = r210495 <= r210496;
double r210498 = 1.0;
double r210499 = c;
double r210500 = r210499 / r210495;
double r210501 = a;
double r210502 = r210495 / r210501;
double r210503 = r210500 - r210502;
double r210504 = r210498 * r210503;
double r210505 = 6.485606601696406e-71;
bool r210506 = r210495 <= r210505;
double r210507 = -r210495;
double r210508 = r210495 * r210495;
double r210509 = 4.0;
double r210510 = r210509 * r210501;
double r210511 = r210510 * r210499;
double r210512 = r210508 - r210511;
double r210513 = sqrt(r210512);
double r210514 = r210507 + r210513;
double r210515 = 1.0;
double r210516 = 2.0;
double r210517 = r210516 * r210501;
double r210518 = r210515 / r210517;
double r210519 = r210514 * r210518;
double r210520 = -1.0;
double r210521 = r210520 * r210500;
double r210522 = r210506 ? r210519 : r210521;
double r210523 = r210497 ? r210504 : r210522;
return r210523;
}




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
(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)))