\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\end{array}\begin{array}{l}
\mathbf{if}\;b \le -8.55528137777049654 \cdot 10^{140}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(\sqrt[3]{\left(4 \cdot a\right) \cdot c} \cdot \sqrt[3]{\left(4 \cdot a\right) \cdot c}\right) \cdot \sqrt[3]{\left(4 \cdot a\right) \cdot c}}}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}\\
\mathbf{elif}\;b \le 4.0475922896827089 \cdot 10^{46}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{2 \cdot \frac{a \cdot c}{b} - 2 \cdot b}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r26664 = b;
double r26665 = 0.0;
bool r26666 = r26664 >= r26665;
double r26667 = 2.0;
double r26668 = c;
double r26669 = r26667 * r26668;
double r26670 = -r26664;
double r26671 = r26664 * r26664;
double r26672 = 4.0;
double r26673 = a;
double r26674 = r26672 * r26673;
double r26675 = r26674 * r26668;
double r26676 = r26671 - r26675;
double r26677 = sqrt(r26676);
double r26678 = r26670 - r26677;
double r26679 = r26669 / r26678;
double r26680 = r26670 + r26677;
double r26681 = r26667 * r26673;
double r26682 = r26680 / r26681;
double r26683 = r26666 ? r26679 : r26682;
return r26683;
}
double f(double a, double b, double c) {
double r26684 = b;
double r26685 = -8.555281377770497e+140;
bool r26686 = r26684 <= r26685;
double r26687 = 0.0;
bool r26688 = r26684 >= r26687;
double r26689 = 2.0;
double r26690 = c;
double r26691 = r26689 * r26690;
double r26692 = -r26684;
double r26693 = r26684 * r26684;
double r26694 = 4.0;
double r26695 = a;
double r26696 = r26694 * r26695;
double r26697 = r26696 * r26690;
double r26698 = cbrt(r26697);
double r26699 = r26698 * r26698;
double r26700 = r26699 * r26698;
double r26701 = r26693 - r26700;
double r26702 = sqrt(r26701);
double r26703 = r26692 - r26702;
double r26704 = r26691 / r26703;
double r26705 = 1.0;
double r26706 = r26690 / r26684;
double r26707 = r26684 / r26695;
double r26708 = r26706 - r26707;
double r26709 = r26705 * r26708;
double r26710 = r26688 ? r26704 : r26709;
double r26711 = 4.047592289682709e+46;
bool r26712 = r26684 <= r26711;
double r26713 = r26693 - r26697;
double r26714 = sqrt(r26713);
double r26715 = r26692 - r26714;
double r26716 = r26691 / r26715;
double r26717 = sqrt(r26714);
double r26718 = r26717 * r26717;
double r26719 = r26692 + r26718;
double r26720 = r26689 * r26695;
double r26721 = r26719 / r26720;
double r26722 = r26688 ? r26716 : r26721;
double r26723 = r26695 * r26690;
double r26724 = r26723 / r26684;
double r26725 = r26689 * r26724;
double r26726 = 2.0;
double r26727 = r26726 * r26684;
double r26728 = r26725 - r26727;
double r26729 = r26691 / r26728;
double r26730 = r26692 + r26714;
double r26731 = r26730 / r26720;
double r26732 = r26688 ? r26729 : r26731;
double r26733 = r26712 ? r26722 : r26732;
double r26734 = r26686 ? r26710 : r26733;
return r26734;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -8.555281377770497e+140Initial program 58.5
Taylor expanded around -inf 9.5
Taylor expanded around 0 2.4
Simplified2.4
rmApplied add-cube-cbrt2.4
if -8.555281377770497e+140 < b < 4.047592289682709e+46Initial program 9.5
rmApplied add-sqr-sqrt9.5
Applied sqrt-prod9.6
if 4.047592289682709e+46 < b Initial program 24.2
Taylor expanded around inf 6.8
Final simplification7.9
herbie shell --seed 2020046
(FPCore (a b c)
:name "jeff quadratic root 2"
:precision binary64
(if (>= b 0.0) (/ (* 2 c) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))))