\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\end{array}\begin{array}{l}
\mathbf{if}\;b \le -1.328348355692401367625700175591396004283 \cdot 10^{154}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(2 \cdot \frac{a \cdot c}{b} - b\right) - b}\\
\end{array}\\
\mathbf{elif}\;b \le 5.087167594777058298421977950126108150191 \cdot 10^{91}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - e^{\log \left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{\left(\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}} - b}\\
\end{array}double f(double a, double b, double c) {
double r33017 = b;
double r33018 = 0.0;
bool r33019 = r33017 >= r33018;
double r33020 = -r33017;
double r33021 = r33017 * r33017;
double r33022 = 4.0;
double r33023 = a;
double r33024 = r33022 * r33023;
double r33025 = c;
double r33026 = r33024 * r33025;
double r33027 = r33021 - r33026;
double r33028 = sqrt(r33027);
double r33029 = r33020 - r33028;
double r33030 = 2.0;
double r33031 = r33030 * r33023;
double r33032 = r33029 / r33031;
double r33033 = r33030 * r33025;
double r33034 = r33020 + r33028;
double r33035 = r33033 / r33034;
double r33036 = r33019 ? r33032 : r33035;
return r33036;
}
double f(double a, double b, double c) {
double r33037 = b;
double r33038 = -1.3283483556924014e+154;
bool r33039 = r33037 <= r33038;
double r33040 = 0.0;
bool r33041 = r33037 >= r33040;
double r33042 = -r33037;
double r33043 = r33037 * r33037;
double r33044 = 4.0;
double r33045 = a;
double r33046 = r33044 * r33045;
double r33047 = c;
double r33048 = r33046 * r33047;
double r33049 = r33043 - r33048;
double r33050 = sqrt(r33049);
double r33051 = r33042 - r33050;
double r33052 = 2.0;
double r33053 = r33052 * r33045;
double r33054 = r33051 / r33053;
double r33055 = r33052 * r33047;
double r33056 = r33045 * r33047;
double r33057 = r33056 / r33037;
double r33058 = r33052 * r33057;
double r33059 = r33058 - r33037;
double r33060 = r33059 - r33037;
double r33061 = r33055 / r33060;
double r33062 = r33041 ? r33054 : r33061;
double r33063 = 5.087167594777058e+91;
bool r33064 = r33037 <= r33063;
double r33065 = log(r33050);
double r33066 = exp(r33065);
double r33067 = r33042 - r33066;
double r33068 = r33067 / r33053;
double r33069 = r33050 - r33037;
double r33070 = r33055 / r33069;
double r33071 = r33041 ? r33068 : r33070;
double r33072 = 1.0;
double r33073 = r33047 / r33037;
double r33074 = r33037 / r33045;
double r33075 = r33073 - r33074;
double r33076 = r33072 * r33075;
double r33077 = cbrt(r33049);
double r33078 = r33077 * r33077;
double r33079 = r33078 * r33077;
double r33080 = sqrt(r33079);
double r33081 = r33080 - r33037;
double r33082 = r33055 / r33081;
double r33083 = r33041 ? r33076 : r33082;
double r33084 = r33064 ? r33071 : r33083;
double r33085 = r33039 ? r33062 : r33084;
return r33085;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -1.3283483556924014e+154Initial program 37.6
Simplified37.6
Taylor expanded around -inf 7.0
if -1.3283483556924014e+154 < b < 5.087167594777058e+91Initial program 8.5
Simplified8.5
rmApplied add-exp-log9.9
if 5.087167594777058e+91 < b Initial program 44.5
Simplified44.5
Taylor expanded around inf 10.1
Taylor expanded around 0 3.5
Simplified3.5
rmApplied add-cube-cbrt3.5
Final simplification8.4
herbie shell --seed 2019347 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 1"
:precision binary64
(if (>= b 0.0) (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ (* 2 c) (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))))))