\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 -9661478263987.111328125:\\
\;\;\;\;\frac{-1 \cdot c}{b}\\
\mathbf{elif}\;b \le 8.958852798091287000832395933283492118861 \cdot 10^{-209}:\\
\;\;\;\;\frac{1}{a} \cdot \left(\frac{4 \cdot a}{2} \cdot \frac{c}{\sqrt{b \cdot b - a \cdot \left(c \cdot 4\right)} - b}\right)\\
\mathbf{elif}\;b \le 6.033691444141405046034068616119572110107 \cdot 10^{84}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - 4 \cdot \left(c \cdot a\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r74669 = b;
double r74670 = -r74669;
double r74671 = r74669 * r74669;
double r74672 = 4.0;
double r74673 = a;
double r74674 = c;
double r74675 = r74673 * r74674;
double r74676 = r74672 * r74675;
double r74677 = r74671 - r74676;
double r74678 = sqrt(r74677);
double r74679 = r74670 - r74678;
double r74680 = 2.0;
double r74681 = r74680 * r74673;
double r74682 = r74679 / r74681;
return r74682;
}
double f(double a, double b, double c) {
double r74683 = b;
double r74684 = -9661478263987.111;
bool r74685 = r74683 <= r74684;
double r74686 = -1.0;
double r74687 = c;
double r74688 = r74686 * r74687;
double r74689 = r74688 / r74683;
double r74690 = 8.958852798091287e-209;
bool r74691 = r74683 <= r74690;
double r74692 = 1.0;
double r74693 = a;
double r74694 = r74692 / r74693;
double r74695 = 4.0;
double r74696 = r74695 * r74693;
double r74697 = 2.0;
double r74698 = r74696 / r74697;
double r74699 = r74683 * r74683;
double r74700 = r74687 * r74695;
double r74701 = r74693 * r74700;
double r74702 = r74699 - r74701;
double r74703 = sqrt(r74702);
double r74704 = r74703 - r74683;
double r74705 = r74687 / r74704;
double r74706 = r74698 * r74705;
double r74707 = r74694 * r74706;
double r74708 = 6.033691444141405e+84;
bool r74709 = r74683 <= r74708;
double r74710 = -r74683;
double r74711 = r74697 * r74693;
double r74712 = r74710 / r74711;
double r74713 = r74687 * r74693;
double r74714 = r74695 * r74713;
double r74715 = r74699 - r74714;
double r74716 = sqrt(r74715);
double r74717 = r74716 / r74711;
double r74718 = r74712 - r74717;
double r74719 = 1.0;
double r74720 = r74687 / r74683;
double r74721 = r74683 / r74693;
double r74722 = r74720 - r74721;
double r74723 = r74719 * r74722;
double r74724 = r74709 ? r74718 : r74723;
double r74725 = r74691 ? r74707 : r74724;
double r74726 = r74685 ? r74689 : r74725;
return r74726;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.1 |
| Herbie | 8.0 |
if b < -9661478263987.111Initial program 56.4
Taylor expanded around -inf 5.0
Simplified5.0
if -9661478263987.111 < b < 8.958852798091287e-209Initial program 25.5
rmApplied flip--25.7
Simplified17.5
Simplified17.5
rmApplied associate-/r*17.5
Simplified14.8
rmApplied div-inv15.0
if 8.958852798091287e-209 < b < 6.033691444141405e+84Initial program 7.0
rmApplied div-sub7.0
Simplified7.0
Simplified7.0
if 6.033691444141405e+84 < b Initial program 44.0
Taylor expanded around inf 3.5
Simplified3.5
Final simplification8.0
herbie shell --seed 2019194
(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)))