\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) - \left(\sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\right) \cdot \sqrt[3]{\sqrt{b \cdot b - \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 r26637 = b;
double r26638 = 0.0;
bool r26639 = r26637 >= r26638;
double r26640 = 2.0;
double r26641 = c;
double r26642 = r26640 * r26641;
double r26643 = -r26637;
double r26644 = r26637 * r26637;
double r26645 = 4.0;
double r26646 = a;
double r26647 = r26645 * r26646;
double r26648 = r26647 * r26641;
double r26649 = r26644 - r26648;
double r26650 = sqrt(r26649);
double r26651 = r26643 - r26650;
double r26652 = r26642 / r26651;
double r26653 = r26643 + r26650;
double r26654 = r26640 * r26646;
double r26655 = r26653 / r26654;
double r26656 = r26639 ? r26652 : r26655;
return r26656;
}
double f(double a, double b, double c) {
double r26657 = b;
double r26658 = -8.555281377770497e+140;
bool r26659 = r26657 <= r26658;
double r26660 = 0.0;
bool r26661 = r26657 >= r26660;
double r26662 = 2.0;
double r26663 = c;
double r26664 = r26662 * r26663;
double r26665 = -r26657;
double r26666 = r26657 * r26657;
double r26667 = 4.0;
double r26668 = a;
double r26669 = r26667 * r26668;
double r26670 = r26669 * r26663;
double r26671 = r26666 - r26670;
double r26672 = sqrt(r26671);
double r26673 = cbrt(r26672);
double r26674 = r26673 * r26673;
double r26675 = r26674 * r26673;
double r26676 = r26665 - r26675;
double r26677 = r26664 / r26676;
double r26678 = 1.0;
double r26679 = r26663 / r26657;
double r26680 = r26657 / r26668;
double r26681 = r26679 - r26680;
double r26682 = r26678 * r26681;
double r26683 = r26661 ? r26677 : r26682;
double r26684 = 4.047592289682709e+46;
bool r26685 = r26657 <= r26684;
double r26686 = r26665 - r26672;
double r26687 = r26664 / r26686;
double r26688 = sqrt(r26672);
double r26689 = r26688 * r26688;
double r26690 = r26665 + r26689;
double r26691 = r26662 * r26668;
double r26692 = r26690 / r26691;
double r26693 = r26661 ? r26687 : r26692;
double r26694 = r26668 * r26663;
double r26695 = r26694 / r26657;
double r26696 = r26662 * r26695;
double r26697 = 2.0;
double r26698 = r26697 * r26657;
double r26699 = r26696 - r26698;
double r26700 = r26664 / r26699;
double r26701 = r26665 + r26672;
double r26702 = r26701 / r26691;
double r26703 = r26661 ? r26700 : r26702;
double r26704 = r26685 ? r26693 : r26703;
double r26705 = r26659 ? r26683 : r26704;
return r26705;
}



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))))