\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 -3.8424248185280593 \cdot 10^{-34}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 8.01469286573952076 \cdot 10^{79}:\\
\;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r38473 = b;
double r38474 = -r38473;
double r38475 = r38473 * r38473;
double r38476 = 4.0;
double r38477 = a;
double r38478 = c;
double r38479 = r38477 * r38478;
double r38480 = r38476 * r38479;
double r38481 = r38475 - r38480;
double r38482 = sqrt(r38481);
double r38483 = r38474 - r38482;
double r38484 = 2.0;
double r38485 = r38484 * r38477;
double r38486 = r38483 / r38485;
return r38486;
}
double f(double a, double b, double c) {
double r38487 = b;
double r38488 = -3.8424248185280593e-34;
bool r38489 = r38487 <= r38488;
double r38490 = -1.0;
double r38491 = c;
double r38492 = r38491 / r38487;
double r38493 = r38490 * r38492;
double r38494 = 8.014692865739521e+79;
bool r38495 = r38487 <= r38494;
double r38496 = -r38487;
double r38497 = r38487 * r38487;
double r38498 = 4.0;
double r38499 = a;
double r38500 = r38499 * r38491;
double r38501 = r38498 * r38500;
double r38502 = r38497 - r38501;
double r38503 = sqrt(r38502);
double r38504 = r38496 - r38503;
double r38505 = 1.0;
double r38506 = 2.0;
double r38507 = r38506 * r38499;
double r38508 = r38505 / r38507;
double r38509 = r38504 * r38508;
double r38510 = 1.0;
double r38511 = r38487 / r38499;
double r38512 = r38492 - r38511;
double r38513 = r38510 * r38512;
double r38514 = r38495 ? r38509 : r38513;
double r38515 = r38489 ? r38493 : r38514;
return r38515;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.8 |
|---|---|
| Target | 21.0 |
| Herbie | 9.9 |
if b < -3.8424248185280593e-34Initial program 54.2
Taylor expanded around -inf 7.1
if -3.8424248185280593e-34 < b < 8.014692865739521e+79Initial program 14.0
rmApplied div-inv14.1
if 8.014692865739521e+79 < b Initial program 44.3
Taylor expanded around inf 4.3
Simplified4.3
Final simplification9.9
herbie shell --seed 2019199 +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)))