\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 -1.763315479739403460017265344144602342789 \cdot 10^{89}:\\
\;\;\;\;\frac{\mathsf{fma}\left(-2, \frac{b}{a}, \frac{c \cdot 2}{b}\right)}{2}\\
\mathbf{elif}\;b \le 9.136492990928292133394320076175633285536 \cdot 10^{-23}:\\
\;\;\;\;\frac{\frac{1}{a} \cdot \left(\sqrt{b \cdot b - c \cdot \left(a \cdot 4\right)} - b\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r3941629 = b;
double r3941630 = -r3941629;
double r3941631 = r3941629 * r3941629;
double r3941632 = 4.0;
double r3941633 = a;
double r3941634 = c;
double r3941635 = r3941633 * r3941634;
double r3941636 = r3941632 * r3941635;
double r3941637 = r3941631 - r3941636;
double r3941638 = sqrt(r3941637);
double r3941639 = r3941630 + r3941638;
double r3941640 = 2.0;
double r3941641 = r3941640 * r3941633;
double r3941642 = r3941639 / r3941641;
return r3941642;
}
double f(double a, double b, double c) {
double r3941643 = b;
double r3941644 = -1.7633154797394035e+89;
bool r3941645 = r3941643 <= r3941644;
double r3941646 = -2.0;
double r3941647 = a;
double r3941648 = r3941643 / r3941647;
double r3941649 = c;
double r3941650 = 2.0;
double r3941651 = r3941649 * r3941650;
double r3941652 = r3941651 / r3941643;
double r3941653 = fma(r3941646, r3941648, r3941652);
double r3941654 = r3941653 / r3941650;
double r3941655 = 9.136492990928292e-23;
bool r3941656 = r3941643 <= r3941655;
double r3941657 = 1.0;
double r3941658 = r3941657 / r3941647;
double r3941659 = r3941643 * r3941643;
double r3941660 = 4.0;
double r3941661 = r3941647 * r3941660;
double r3941662 = r3941649 * r3941661;
double r3941663 = r3941659 - r3941662;
double r3941664 = sqrt(r3941663);
double r3941665 = r3941664 - r3941643;
double r3941666 = r3941658 * r3941665;
double r3941667 = r3941666 / r3941650;
double r3941668 = -2.0;
double r3941669 = r3941649 / r3941643;
double r3941670 = r3941668 * r3941669;
double r3941671 = r3941670 / r3941650;
double r3941672 = r3941656 ? r3941667 : r3941671;
double r3941673 = r3941645 ? r3941654 : r3941672;
return r3941673;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.4 |
|---|---|
| Target | 21.3 |
| Herbie | 10.3 |
if b < -1.7633154797394035e+89Initial program 45.7
Simplified45.7
rmApplied div-inv45.8
Taylor expanded around -inf 3.9
Simplified4.0
if -1.7633154797394035e+89 < b < 9.136492990928292e-23Initial program 15.0
Simplified15.0
rmApplied div-inv15.2
if 9.136492990928292e-23 < b Initial program 55.4
Simplified55.5
Taylor expanded around inf 6.7
Final simplification10.3
herbie shell --seed 2019172 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))