\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 -5.58543573862810322 \cdot 10^{150}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le -2.3730540219645598 \cdot 10^{-278}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{elif}\;b \le 1.55563303224959 \cdot 10^{106}:\\
\;\;\;\;\frac{1}{\frac{2}{\frac{4}{1} \cdot c} \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r87526 = b;
double r87527 = -r87526;
double r87528 = r87526 * r87526;
double r87529 = 4.0;
double r87530 = a;
double r87531 = c;
double r87532 = r87530 * r87531;
double r87533 = r87529 * r87532;
double r87534 = r87528 - r87533;
double r87535 = sqrt(r87534);
double r87536 = r87527 + r87535;
double r87537 = 2.0;
double r87538 = r87537 * r87530;
double r87539 = r87536 / r87538;
return r87539;
}
double f(double a, double b, double c) {
double r87540 = b;
double r87541 = -5.585435738628103e+150;
bool r87542 = r87540 <= r87541;
double r87543 = 1.0;
double r87544 = c;
double r87545 = r87544 / r87540;
double r87546 = a;
double r87547 = r87540 / r87546;
double r87548 = r87545 - r87547;
double r87549 = r87543 * r87548;
double r87550 = -2.3730540219645598e-278;
bool r87551 = r87540 <= r87550;
double r87552 = 1.0;
double r87553 = 2.0;
double r87554 = r87553 * r87546;
double r87555 = -r87540;
double r87556 = r87540 * r87540;
double r87557 = 4.0;
double r87558 = r87546 * r87544;
double r87559 = r87557 * r87558;
double r87560 = r87556 - r87559;
double r87561 = sqrt(r87560);
double r87562 = r87555 + r87561;
double r87563 = r87554 / r87562;
double r87564 = r87552 / r87563;
double r87565 = 1.55563303224959e+106;
bool r87566 = r87540 <= r87565;
double r87567 = r87557 / r87552;
double r87568 = r87567 * r87544;
double r87569 = r87553 / r87568;
double r87570 = r87555 - r87561;
double r87571 = r87569 * r87570;
double r87572 = r87552 / r87571;
double r87573 = -1.0;
double r87574 = r87573 * r87545;
double r87575 = r87566 ? r87572 : r87574;
double r87576 = r87551 ? r87564 : r87575;
double r87577 = r87542 ? r87549 : r87576;
return r87577;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 20.7 |
| Herbie | 6.9 |
if b < -5.585435738628103e+150Initial program 61.5
Taylor expanded around -inf 2.2
Simplified2.2
if -5.585435738628103e+150 < b < -2.3730540219645598e-278Initial program 8.2
rmApplied clear-num8.3
if -2.3730540219645598e-278 < b < 1.55563303224959e+106Initial program 31.3
rmApplied flip-+31.3
Simplified16.7
rmApplied *-un-lft-identity16.7
Applied *-un-lft-identity16.7
Applied times-frac16.7
Applied associate-/l*16.9
Simplified16.2
rmApplied associate-/l*16.2
Simplified9.9
if 1.55563303224959e+106 < b Initial program 60.3
Taylor expanded around inf 2.7
Final simplification6.9
herbie shell --seed 2020062
(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)))