\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.089942740476039 \cdot 10^{+37}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 1.1606217053284985 \cdot 10^{-301}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - \left(a \cdot 4\right) \cdot c} - b}{a \cdot 2}\\
\mathbf{elif}\;b \le 1.9653089193303188 \cdot 10^{+135}:\\
\;\;\;\;\frac{c \cdot -2}{\sqrt{b \cdot b - \left(a \cdot 4\right) \cdot c} + b}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r3809555 = b;
double r3809556 = -r3809555;
double r3809557 = r3809555 * r3809555;
double r3809558 = 4.0;
double r3809559 = a;
double r3809560 = c;
double r3809561 = r3809559 * r3809560;
double r3809562 = r3809558 * r3809561;
double r3809563 = r3809557 - r3809562;
double r3809564 = sqrt(r3809563);
double r3809565 = r3809556 + r3809564;
double r3809566 = 2.0;
double r3809567 = r3809566 * r3809559;
double r3809568 = r3809565 / r3809567;
return r3809568;
}
double f(double a, double b, double c) {
double r3809569 = b;
double r3809570 = -5.089942740476039e+37;
bool r3809571 = r3809569 <= r3809570;
double r3809572 = c;
double r3809573 = r3809572 / r3809569;
double r3809574 = a;
double r3809575 = r3809569 / r3809574;
double r3809576 = r3809573 - r3809575;
double r3809577 = 1.1606217053284985e-301;
bool r3809578 = r3809569 <= r3809577;
double r3809579 = r3809569 * r3809569;
double r3809580 = 4.0;
double r3809581 = r3809574 * r3809580;
double r3809582 = r3809581 * r3809572;
double r3809583 = r3809579 - r3809582;
double r3809584 = sqrt(r3809583);
double r3809585 = r3809584 - r3809569;
double r3809586 = 2.0;
double r3809587 = r3809574 * r3809586;
double r3809588 = r3809585 / r3809587;
double r3809589 = 1.9653089193303188e+135;
bool r3809590 = r3809569 <= r3809589;
double r3809591 = -2.0;
double r3809592 = r3809572 * r3809591;
double r3809593 = r3809584 + r3809569;
double r3809594 = r3809592 / r3809593;
double r3809595 = -r3809573;
double r3809596 = r3809590 ? r3809594 : r3809595;
double r3809597 = r3809578 ? r3809588 : r3809596;
double r3809598 = r3809571 ? r3809576 : r3809597;
return r3809598;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.7 |
| Herbie | 7.1 |
if b < -5.089942740476039e+37Initial program 34.9
Simplified34.9
rmApplied div-inv35.0
Taylor expanded around -inf 6.3
if -5.089942740476039e+37 < b < 1.1606217053284985e-301Initial program 10.3
Simplified10.3
if 1.1606217053284985e-301 < b < 1.9653089193303188e+135Initial program 34.6
Simplified34.6
rmApplied div-inv34.6
rmApplied flip--34.7
Applied associate-*l/34.7
Simplified14.6
Taylor expanded around 0 8.3
if 1.9653089193303188e+135 < b Initial program 61.2
Simplified61.2
Taylor expanded around inf 2.1
Simplified2.1
Final simplification7.1
herbie shell --seed 2019121
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 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)))