\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 -3.304421310335197068961304849785779948437 \cdot 10^{-75}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 1.680510304999259194268524546555599685222 \cdot 10^{-106}:\\
\;\;\;\;\frac{\frac{\left(c \cdot a\right) \cdot 4}{\left(-b\right) + \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4}}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\end{array}double f(double a, double b, double c) {
double r2089584 = b;
double r2089585 = -r2089584;
double r2089586 = r2089584 * r2089584;
double r2089587 = 4.0;
double r2089588 = a;
double r2089589 = c;
double r2089590 = r2089588 * r2089589;
double r2089591 = r2089587 * r2089590;
double r2089592 = r2089586 - r2089591;
double r2089593 = sqrt(r2089592);
double r2089594 = r2089585 - r2089593;
double r2089595 = 2.0;
double r2089596 = r2089595 * r2089588;
double r2089597 = r2089594 / r2089596;
return r2089597;
}
double f(double a, double b, double c) {
double r2089598 = b;
double r2089599 = -3.304421310335197e-75;
bool r2089600 = r2089598 <= r2089599;
double r2089601 = -1.0;
double r2089602 = c;
double r2089603 = r2089602 / r2089598;
double r2089604 = r2089601 * r2089603;
double r2089605 = 1.6805103049992592e-106;
bool r2089606 = r2089598 <= r2089605;
double r2089607 = a;
double r2089608 = r2089602 * r2089607;
double r2089609 = 4.0;
double r2089610 = r2089608 * r2089609;
double r2089611 = -r2089598;
double r2089612 = r2089598 * r2089598;
double r2089613 = r2089612 - r2089610;
double r2089614 = sqrt(r2089613);
double r2089615 = r2089611 + r2089614;
double r2089616 = r2089610 / r2089615;
double r2089617 = 2.0;
double r2089618 = r2089607 * r2089617;
double r2089619 = r2089616 / r2089618;
double r2089620 = r2089598 / r2089607;
double r2089621 = r2089603 - r2089620;
double r2089622 = 1.0;
double r2089623 = r2089621 * r2089622;
double r2089624 = r2089606 ? r2089619 : r2089623;
double r2089625 = r2089600 ? r2089604 : r2089624;
return r2089625;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.3 |
| Herbie | 13.2 |
if b < -3.304421310335197e-75Initial program 53.0
Taylor expanded around -inf 9.8
if -3.304421310335197e-75 < b < 1.6805103049992592e-106Initial program 17.6
rmApplied flip--20.2
Taylor expanded around inf 19.1
if 1.6805103049992592e-106 < b Initial program 25.3
rmApplied div-inv25.4
Taylor expanded around inf 12.5
Simplified12.5
Final simplification13.2
herbie shell --seed 2019170 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))