\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 -2.2415082771065304 \cdot 10^{-131}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\mathbf{elif}\;b \le 2.559678284282607 \cdot 10^{+69}:\\
\;\;\;\;\frac{\frac{1}{a} \cdot \left(\left(-b\right) - \sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)}\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\end{array}double f(double a, double b, double c) {
double r1157341 = b;
double r1157342 = -r1157341;
double r1157343 = r1157341 * r1157341;
double r1157344 = 4.0;
double r1157345 = a;
double r1157346 = c;
double r1157347 = r1157345 * r1157346;
double r1157348 = r1157344 * r1157347;
double r1157349 = r1157343 - r1157348;
double r1157350 = sqrt(r1157349);
double r1157351 = r1157342 - r1157350;
double r1157352 = 2.0;
double r1157353 = r1157352 * r1157345;
double r1157354 = r1157351 / r1157353;
return r1157354;
}
double f(double a, double b, double c) {
double r1157355 = b;
double r1157356 = -2.2415082771065304e-131;
bool r1157357 = r1157355 <= r1157356;
double r1157358 = -2.0;
double r1157359 = c;
double r1157360 = r1157359 / r1157355;
double r1157361 = r1157358 * r1157360;
double r1157362 = 2.0;
double r1157363 = r1157361 / r1157362;
double r1157364 = 2.559678284282607e+69;
bool r1157365 = r1157355 <= r1157364;
double r1157366 = 1.0;
double r1157367 = a;
double r1157368 = r1157366 / r1157367;
double r1157369 = -r1157355;
double r1157370 = -4.0;
double r1157371 = r1157367 * r1157370;
double r1157372 = r1157355 * r1157355;
double r1157373 = fma(r1157371, r1157359, r1157372);
double r1157374 = sqrt(r1157373);
double r1157375 = r1157369 - r1157374;
double r1157376 = r1157368 * r1157375;
double r1157377 = r1157376 / r1157362;
double r1157378 = r1157355 / r1157367;
double r1157379 = r1157360 - r1157378;
double r1157380 = r1157379 * r1157362;
double r1157381 = r1157380 / r1157362;
double r1157382 = r1157365 ? r1157377 : r1157381;
double r1157383 = r1157357 ? r1157363 : r1157382;
return r1157383;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.2 |
|---|---|
| Target | 19.9 |
| Herbie | 10.8 |
if b < -2.2415082771065304e-131Initial program 49.6
Simplified49.7
Taylor expanded around -inf 12.4
if -2.2415082771065304e-131 < b < 2.559678284282607e+69Initial program 11.4
Simplified11.4
rmApplied div-inv11.5
if 2.559678284282607e+69 < b Initial program 38.9
Simplified38.9
rmApplied div-inv39.0
Taylor expanded around inf 4.8
Simplified4.8
Final simplification10.8
herbie shell --seed 2019152 +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)))