\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 -2.3044033969831823 \cdot 10^{153}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.9238883452280037 \cdot 10^{-130}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} + \left(-b\right)}{2 \cdot a}\\
\mathbf{elif}\;b \le 4.01993084419163312 \cdot 10^{109}:\\
\;\;\;\;\frac{\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r74572 = b;
double r74573 = -r74572;
double r74574 = r74572 * r74572;
double r74575 = 4.0;
double r74576 = a;
double r74577 = c;
double r74578 = r74576 * r74577;
double r74579 = r74575 * r74578;
double r74580 = r74574 - r74579;
double r74581 = sqrt(r74580);
double r74582 = r74573 + r74581;
double r74583 = 2.0;
double r74584 = r74583 * r74576;
double r74585 = r74582 / r74584;
return r74585;
}
double f(double a, double b, double c) {
double r74586 = b;
double r74587 = -2.3044033969831823e+153;
bool r74588 = r74586 <= r74587;
double r74589 = 1.0;
double r74590 = c;
double r74591 = r74590 / r74586;
double r74592 = a;
double r74593 = r74586 / r74592;
double r74594 = r74591 - r74593;
double r74595 = r74589 * r74594;
double r74596 = 1.9238883452280037e-130;
bool r74597 = r74586 <= r74596;
double r74598 = r74586 * r74586;
double r74599 = 4.0;
double r74600 = r74592 * r74590;
double r74601 = r74599 * r74600;
double r74602 = r74598 - r74601;
double r74603 = sqrt(r74602);
double r74604 = -r74586;
double r74605 = r74603 + r74604;
double r74606 = 2.0;
double r74607 = r74606 * r74592;
double r74608 = r74605 / r74607;
double r74609 = 4.019930844191633e+109;
bool r74610 = r74586 <= r74609;
double r74611 = 0.0;
double r74612 = r74611 + r74601;
double r74613 = r74604 - r74603;
double r74614 = r74612 / r74613;
double r74615 = r74614 / r74607;
double r74616 = -1.0;
double r74617 = r74616 * r74591;
double r74618 = r74610 ? r74615 : r74617;
double r74619 = r74597 ? r74608 : r74618;
double r74620 = r74588 ? r74595 : r74619;
return r74620;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 20.6 |
| Herbie | 9.2 |
if b < -2.3044033969831823e+153Initial program 63.5
Taylor expanded around -inf 2.0
Simplified2.0
if -2.3044033969831823e+153 < b < 1.9238883452280037e-130Initial program 11.3
rmApplied +-commutative11.3
if 1.9238883452280037e-130 < b < 4.019930844191633e+109Initial program 40.3
rmApplied flip-+40.3
Simplified15.5
if 4.019930844191633e+109 < b Initial program 59.9
Taylor expanded around inf 2.4
Final simplification9.2
herbie shell --seed 2020060 +o rules:numerics
(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)))