\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 -1.2303558036345968 \cdot 10^{-110}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 5.869467752933353 \cdot 10^{+121}:\\
\;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{(\left(c \cdot a\right) \cdot -4 + \left(b \cdot b\right))_*}}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r4172127 = b;
double r4172128 = -r4172127;
double r4172129 = r4172127 * r4172127;
double r4172130 = 4.0;
double r4172131 = a;
double r4172132 = c;
double r4172133 = r4172131 * r4172132;
double r4172134 = r4172130 * r4172133;
double r4172135 = r4172129 - r4172134;
double r4172136 = sqrt(r4172135);
double r4172137 = r4172128 - r4172136;
double r4172138 = 2.0;
double r4172139 = r4172138 * r4172131;
double r4172140 = r4172137 / r4172139;
return r4172140;
}
double f(double a, double b, double c) {
double r4172141 = b;
double r4172142 = -1.2303558036345968e-110;
bool r4172143 = r4172141 <= r4172142;
double r4172144 = c;
double r4172145 = r4172144 / r4172141;
double r4172146 = -r4172145;
double r4172147 = 5.869467752933353e+121;
bool r4172148 = r4172141 <= r4172147;
double r4172149 = -r4172141;
double r4172150 = a;
double r4172151 = r4172144 * r4172150;
double r4172152 = -4.0;
double r4172153 = r4172141 * r4172141;
double r4172154 = fma(r4172151, r4172152, r4172153);
double r4172155 = sqrt(r4172154);
double r4172156 = r4172149 - r4172155;
double r4172157 = 2.0;
double r4172158 = r4172156 / r4172157;
double r4172159 = r4172158 / r4172150;
double r4172160 = r4172141 / r4172150;
double r4172161 = r4172145 - r4172160;
double r4172162 = r4172148 ? r4172159 : r4172161;
double r4172163 = r4172143 ? r4172146 : r4172162;
return r4172163;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.3 |
|---|---|
| Target | 20.2 |
| Herbie | 9.6 |
if b < -1.2303558036345968e-110Initial program 50.8
Simplified50.8
Taylor expanded around 0 50.8
Simplified50.8
rmApplied *-un-lft-identity50.8
Applied div-inv50.8
Applied times-frac50.8
Simplified50.8
Simplified50.8
Taylor expanded around -inf 10.2
Simplified10.2
if -1.2303558036345968e-110 < b < 5.869467752933353e+121Initial program 11.0
Simplified11.0
Taylor expanded around 0 11.0
Simplified11.0
if 5.869467752933353e+121 < b Initial program 51.7
Simplified51.7
Taylor expanded around inf 3.4
Final simplification9.6
herbie shell --seed 2019119 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 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)))