\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.247157674878585888858757389039773391247 \cdot 10^{-136}:\\
\;\;\;\;\frac{-1}{1 \cdot \left(\frac{b}{c} - \frac{a}{b}\right)}\\
\mathbf{elif}\;b \le 9.027398388687083073747117877445020640893 \cdot 10^{77}:\\
\;\;\;\;\frac{-1}{a \cdot 2} \cdot \left(\sqrt{\mathsf{fma}\left(-a \cdot c, 4, b \cdot b\right)} + b\right)\\
\mathbf{else}:\\
\;\;\;\;\left(-\left(\frac{b}{a} - \frac{c}{b}\right)\right) \cdot 1\\
\end{array}double f(double a, double b, double c) {
double r92681 = b;
double r92682 = -r92681;
double r92683 = r92681 * r92681;
double r92684 = 4.0;
double r92685 = a;
double r92686 = c;
double r92687 = r92685 * r92686;
double r92688 = r92684 * r92687;
double r92689 = r92683 - r92688;
double r92690 = sqrt(r92689);
double r92691 = r92682 - r92690;
double r92692 = 2.0;
double r92693 = r92692 * r92685;
double r92694 = r92691 / r92693;
return r92694;
}
double f(double a, double b, double c) {
double r92695 = b;
double r92696 = -1.2471576748785859e-136;
bool r92697 = r92695 <= r92696;
double r92698 = -1.0;
double r92699 = 1.0;
double r92700 = c;
double r92701 = r92695 / r92700;
double r92702 = a;
double r92703 = r92702 / r92695;
double r92704 = r92701 - r92703;
double r92705 = r92699 * r92704;
double r92706 = r92698 / r92705;
double r92707 = 9.027398388687083e+77;
bool r92708 = r92695 <= r92707;
double r92709 = 2.0;
double r92710 = r92702 * r92709;
double r92711 = r92698 / r92710;
double r92712 = r92702 * r92700;
double r92713 = -r92712;
double r92714 = 4.0;
double r92715 = r92695 * r92695;
double r92716 = fma(r92713, r92714, r92715);
double r92717 = sqrt(r92716);
double r92718 = r92717 + r92695;
double r92719 = r92711 * r92718;
double r92720 = r92695 / r92702;
double r92721 = r92700 / r92695;
double r92722 = r92720 - r92721;
double r92723 = -r92722;
double r92724 = r92723 * r92699;
double r92725 = r92708 ? r92719 : r92724;
double r92726 = r92697 ? r92706 : r92725;
return r92726;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.2 |
|---|---|
| Target | 21.2 |
| Herbie | 11.4 |
if b < -1.2471576748785859e-136Initial program 50.5
Simplified50.5
rmApplied clear-num50.5
Simplified50.5
Taylor expanded around -inf 13.3
Simplified13.3
if -1.2471576748785859e-136 < b < 9.027398388687083e+77Initial program 12.0
Simplified12.0
rmApplied div-inv12.2
Simplified12.2
if 9.027398388687083e+77 < b Initial program 42.5
Simplified42.5
rmApplied div-inv42.6
Simplified42.6
Taylor expanded around inf 5.0
Simplified5.0
Final simplification11.4
herbie shell --seed 2019196 +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)))