\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{c}{b}\\
\mathbf{elif}\;b \le 2.559678284282607 \cdot 10^{+69}:\\
\;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4}\right) \cdot \frac{\frac{1}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r2143435 = b;
double r2143436 = -r2143435;
double r2143437 = r2143435 * r2143435;
double r2143438 = 4.0;
double r2143439 = a;
double r2143440 = c;
double r2143441 = r2143439 * r2143440;
double r2143442 = r2143438 * r2143441;
double r2143443 = r2143437 - r2143442;
double r2143444 = sqrt(r2143443);
double r2143445 = r2143436 - r2143444;
double r2143446 = 2.0;
double r2143447 = r2143446 * r2143439;
double r2143448 = r2143445 / r2143447;
return r2143448;
}
double f(double a, double b, double c) {
double r2143449 = b;
double r2143450 = -2.2415082771065304e-131;
bool r2143451 = r2143449 <= r2143450;
double r2143452 = c;
double r2143453 = r2143452 / r2143449;
double r2143454 = -r2143453;
double r2143455 = 2.559678284282607e+69;
bool r2143456 = r2143449 <= r2143455;
double r2143457 = -r2143449;
double r2143458 = r2143449 * r2143449;
double r2143459 = a;
double r2143460 = r2143452 * r2143459;
double r2143461 = 4.0;
double r2143462 = r2143460 * r2143461;
double r2143463 = r2143458 - r2143462;
double r2143464 = sqrt(r2143463);
double r2143465 = r2143457 - r2143464;
double r2143466 = 0.5;
double r2143467 = r2143466 / r2143459;
double r2143468 = r2143465 * r2143467;
double r2143469 = r2143449 / r2143459;
double r2143470 = r2143453 - r2143469;
double r2143471 = r2143456 ? r2143468 : r2143470;
double r2143472 = r2143451 ? r2143454 : r2143471;
return r2143472;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.2 |
|---|---|
| Target | 19.9 |
| Herbie | 10.7 |
if b < -2.2415082771065304e-131Initial program 49.6
Taylor expanded around -inf 12.4
Simplified12.4
if -2.2415082771065304e-131 < b < 2.559678284282607e+69Initial program 11.4
rmApplied div-inv11.6
Simplified11.5
if 2.559678284282607e+69 < b Initial program 38.9
Taylor expanded around inf 4.8
Final simplification10.7
herbie shell --seed 2019152
(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)))