\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 -6.371698442415157100029538982618411822116 \cdot 10^{150}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 2.306544477380116301747543706493703838768 \cdot 10^{-129}:\\
\;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\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 r87491 = b;
double r87492 = -r87491;
double r87493 = r87491 * r87491;
double r87494 = 4.0;
double r87495 = a;
double r87496 = c;
double r87497 = r87495 * r87496;
double r87498 = r87494 * r87497;
double r87499 = r87493 - r87498;
double r87500 = sqrt(r87499);
double r87501 = r87492 + r87500;
double r87502 = 2.0;
double r87503 = r87502 * r87495;
double r87504 = r87501 / r87503;
return r87504;
}
double f(double a, double b, double c) {
double r87505 = b;
double r87506 = -6.371698442415157e+150;
bool r87507 = r87505 <= r87506;
double r87508 = 1.0;
double r87509 = c;
double r87510 = r87509 / r87505;
double r87511 = a;
double r87512 = r87505 / r87511;
double r87513 = r87510 - r87512;
double r87514 = r87508 * r87513;
double r87515 = 2.3065444773801163e-129;
bool r87516 = r87505 <= r87515;
double r87517 = -r87505;
double r87518 = r87505 * r87505;
double r87519 = 4.0;
double r87520 = r87511 * r87509;
double r87521 = r87519 * r87520;
double r87522 = r87518 - r87521;
double r87523 = sqrt(r87522);
double r87524 = r87517 + r87523;
double r87525 = 1.0;
double r87526 = 2.0;
double r87527 = r87526 * r87511;
double r87528 = r87525 / r87527;
double r87529 = r87524 * r87528;
double r87530 = -1.0;
double r87531 = r87530 * r87510;
double r87532 = r87516 ? r87529 : r87531;
double r87533 = r87507 ? r87514 : r87532;
return r87533;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.7 |
|---|---|
| Target | 21.4 |
| Herbie | 10.8 |
if b < -6.371698442415157e+150Initial program 63.0
Taylor expanded around -inf 2.5
Simplified2.5
if -6.371698442415157e+150 < b < 2.3065444773801163e-129Initial program 11.3
rmApplied div-inv11.4
if 2.3065444773801163e-129 < b Initial program 51.5
Taylor expanded around inf 12.3
Final simplification10.8
herbie shell --seed 2019344
(FPCore (a b c)
:name "quadp (p42, positive)"
: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)))