\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 -9.155327002621879240971632151563348379742 \cdot 10^{117}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 3.622962172940872725615087320648120303101 \cdot 10^{-206}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{elif}\;b \le 5.179201385701060896596521886473852187744 \cdot 10^{98}:\\
\;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r78008 = b;
double r78009 = -r78008;
double r78010 = r78008 * r78008;
double r78011 = 4.0;
double r78012 = a;
double r78013 = c;
double r78014 = r78012 * r78013;
double r78015 = r78011 * r78014;
double r78016 = r78010 - r78015;
double r78017 = sqrt(r78016);
double r78018 = r78009 - r78017;
double r78019 = 2.0;
double r78020 = r78019 * r78012;
double r78021 = r78018 / r78020;
return r78021;
}
double f(double a, double b, double c) {
double r78022 = b;
double r78023 = -9.155327002621879e+117;
bool r78024 = r78022 <= r78023;
double r78025 = -1.0;
double r78026 = c;
double r78027 = r78026 / r78022;
double r78028 = r78025 * r78027;
double r78029 = 3.622962172940873e-206;
bool r78030 = r78022 <= r78029;
double r78031 = 2.0;
double r78032 = r78031 * r78026;
double r78033 = -r78022;
double r78034 = r78022 * r78022;
double r78035 = 4.0;
double r78036 = a;
double r78037 = r78036 * r78026;
double r78038 = r78035 * r78037;
double r78039 = r78034 - r78038;
double r78040 = sqrt(r78039);
double r78041 = r78033 + r78040;
double r78042 = r78032 / r78041;
double r78043 = 5.179201385701061e+98;
bool r78044 = r78022 <= r78043;
double r78045 = r78033 - r78040;
double r78046 = r78045 / r78031;
double r78047 = r78046 / r78036;
double r78048 = 1.0;
double r78049 = r78022 / r78036;
double r78050 = r78027 - r78049;
double r78051 = r78048 * r78050;
double r78052 = r78044 ? r78047 : r78051;
double r78053 = r78030 ? r78042 : r78052;
double r78054 = r78024 ? r78028 : r78053;
return r78054;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 20.4 |
| Herbie | 6.5 |
if b < -9.155327002621879e+117Initial program 60.8
Taylor expanded around -inf 1.8
if -9.155327002621879e+117 < b < 3.622962172940873e-206Initial program 30.1
rmApplied associate-/r*30.1
rmApplied *-un-lft-identity30.1
Applied div-inv30.1
Applied times-frac30.1
Simplified30.1
rmApplied flip--30.3
Applied associate-*l/30.3
Simplified14.7
Taylor expanded around 0 9.4
if 3.622962172940873e-206 < b < 5.179201385701061e+98Initial program 8.1
rmApplied associate-/r*8.1
if 5.179201385701061e+98 < b Initial program 44.9
Taylor expanded around inf 3.5
Simplified3.5
Final simplification6.5
herbie shell --seed 2019298
(FPCore (a b c)
:name "quadm (p42, negative)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))