\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 -0.03099989563658142946445117615894560003653:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -2.501186677105648684932975589367300398392 \cdot 10^{-154}:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - b \cdot b\right) + a \cdot \left(c \cdot 4\right)}{a \cdot 2}}{\sqrt{b \cdot b - a \cdot \left(c \cdot 4\right)} + \left(-b\right)}\\
\mathbf{elif}\;b \le 63580190853209333432320:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - a \cdot \left(c \cdot 4\right)}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\end{array}double f(double a, double b, double c) {
double r5228213 = b;
double r5228214 = -r5228213;
double r5228215 = r5228213 * r5228213;
double r5228216 = 4.0;
double r5228217 = a;
double r5228218 = c;
double r5228219 = r5228217 * r5228218;
double r5228220 = r5228216 * r5228219;
double r5228221 = r5228215 - r5228220;
double r5228222 = sqrt(r5228221);
double r5228223 = r5228214 - r5228222;
double r5228224 = 2.0;
double r5228225 = r5228224 * r5228217;
double r5228226 = r5228223 / r5228225;
return r5228226;
}
double f(double a, double b, double c) {
double r5228227 = b;
double r5228228 = -0.03099989563658143;
bool r5228229 = r5228227 <= r5228228;
double r5228230 = -1.0;
double r5228231 = c;
double r5228232 = r5228231 / r5228227;
double r5228233 = r5228230 * r5228232;
double r5228234 = -2.5011866771056487e-154;
bool r5228235 = r5228227 <= r5228234;
double r5228236 = r5228227 * r5228227;
double r5228237 = r5228236 - r5228236;
double r5228238 = a;
double r5228239 = 4.0;
double r5228240 = r5228231 * r5228239;
double r5228241 = r5228238 * r5228240;
double r5228242 = r5228237 + r5228241;
double r5228243 = 2.0;
double r5228244 = r5228238 * r5228243;
double r5228245 = r5228242 / r5228244;
double r5228246 = r5228236 - r5228241;
double r5228247 = sqrt(r5228246);
double r5228248 = -r5228227;
double r5228249 = r5228247 + r5228248;
double r5228250 = r5228245 / r5228249;
double r5228251 = 6.358019085320933e+22;
bool r5228252 = r5228227 <= r5228251;
double r5228253 = r5228248 - r5228247;
double r5228254 = r5228253 / r5228244;
double r5228255 = r5228227 / r5228238;
double r5228256 = r5228232 - r5228255;
double r5228257 = 1.0;
double r5228258 = r5228256 * r5228257;
double r5228259 = r5228252 ? r5228254 : r5228258;
double r5228260 = r5228235 ? r5228250 : r5228259;
double r5228261 = r5228229 ? r5228233 : r5228260;
return r5228261;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 20.8 |
| Herbie | 9.3 |
if b < -0.03099989563658143Initial program 55.6
Taylor expanded around -inf 6.4
if -0.03099989563658143 < b < -2.5011866771056487e-154Initial program 31.3
Taylor expanded around 0 31.3
Simplified31.4
rmApplied div-inv31.4
rmApplied flip--31.5
Applied associate-*l/31.5
Simplified16.0
if -2.5011866771056487e-154 < b < 6.358019085320933e+22Initial program 12.3
Taylor expanded around 0 12.3
Simplified12.4
rmApplied div-inv12.5
rmApplied *-un-lft-identity12.5
Applied associate-*l*12.5
Simplified12.4
if 6.358019085320933e+22 < b Initial program 33.1
Taylor expanded around inf 6.1
Simplified6.1
Final simplification9.3
herbie shell --seed 2019192 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))