\begin{array}{l}
\mathbf{if}\;b \ge 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 -3.037202934115589 \cdot 10^{+61}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0:\\
\;\;\;\;\frac{2 \cdot c}{2 \cdot \left(\frac{a}{\frac{b}{c}} - b\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\frac{a}{b} \cdot c - b\right) \cdot 2}{a \cdot 2}\\
\end{array}\\
\mathbf{elif}\;b \le 3.1115579814291686 \cdot 10^{+29}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - c \cdot \left(a \cdot 4\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\sqrt[3]{b \cdot b - c \cdot \left(a \cdot 4\right)}} \cdot \left|\sqrt[3]{b \cdot b - c \cdot \left(a \cdot 4\right)}\right|}{a \cdot 2}\\
\end{array}\\
\mathbf{elif}\;b \ge 0:\\
\;\;\;\;\frac{2 \cdot c}{2 \cdot \left(\frac{a}{\frac{b}{c}} - b\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\frac{a}{b} \cdot c - b\right) \cdot 2}{a \cdot 2}\\
\end{array}double f(double a, double b, double c) {
double r1030059 = b;
double r1030060 = 0.0;
bool r1030061 = r1030059 >= r1030060;
double r1030062 = 2.0;
double r1030063 = c;
double r1030064 = r1030062 * r1030063;
double r1030065 = -r1030059;
double r1030066 = r1030059 * r1030059;
double r1030067 = 4.0;
double r1030068 = a;
double r1030069 = r1030067 * r1030068;
double r1030070 = r1030069 * r1030063;
double r1030071 = r1030066 - r1030070;
double r1030072 = sqrt(r1030071);
double r1030073 = r1030065 - r1030072;
double r1030074 = r1030064 / r1030073;
double r1030075 = r1030065 + r1030072;
double r1030076 = r1030062 * r1030068;
double r1030077 = r1030075 / r1030076;
double r1030078 = r1030061 ? r1030074 : r1030077;
return r1030078;
}
double f(double a, double b, double c) {
double r1030079 = b;
double r1030080 = -3.037202934115589e+61;
bool r1030081 = r1030079 <= r1030080;
double r1030082 = 0.0;
bool r1030083 = r1030079 >= r1030082;
double r1030084 = 2.0;
double r1030085 = c;
double r1030086 = r1030084 * r1030085;
double r1030087 = a;
double r1030088 = r1030079 / r1030085;
double r1030089 = r1030087 / r1030088;
double r1030090 = r1030089 - r1030079;
double r1030091 = r1030084 * r1030090;
double r1030092 = r1030086 / r1030091;
double r1030093 = r1030087 / r1030079;
double r1030094 = r1030093 * r1030085;
double r1030095 = r1030094 - r1030079;
double r1030096 = r1030095 * r1030084;
double r1030097 = r1030087 * r1030084;
double r1030098 = r1030096 / r1030097;
double r1030099 = r1030083 ? r1030092 : r1030098;
double r1030100 = 3.1115579814291686e+29;
bool r1030101 = r1030079 <= r1030100;
double r1030102 = -r1030079;
double r1030103 = r1030079 * r1030079;
double r1030104 = 4.0;
double r1030105 = r1030087 * r1030104;
double r1030106 = r1030085 * r1030105;
double r1030107 = r1030103 - r1030106;
double r1030108 = sqrt(r1030107);
double r1030109 = r1030102 - r1030108;
double r1030110 = r1030086 / r1030109;
double r1030111 = cbrt(r1030107);
double r1030112 = sqrt(r1030111);
double r1030113 = fabs(r1030111);
double r1030114 = r1030112 * r1030113;
double r1030115 = r1030102 + r1030114;
double r1030116 = r1030115 / r1030097;
double r1030117 = r1030083 ? r1030110 : r1030116;
double r1030118 = r1030101 ? r1030117 : r1030099;
double r1030119 = r1030081 ? r1030099 : r1030118;
return r1030119;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -3.037202934115589e+61 or 3.1115579814291686e+29 < b Initial program 29.2
rmApplied add-sqr-sqrt29.2
Taylor expanded around -inf 18.7
Simplified16.8
Taylor expanded around inf 7.0
Simplified4.9
if -3.037202934115589e+61 < b < 3.1115579814291686e+29Initial program 9.3
rmApplied add-cube-cbrt9.6
Applied sqrt-prod9.6
Simplified9.6
Final simplification7.3
herbie shell --seed 2019134 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 2"
(if (>= b 0) (/ (* 2 c) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))))