\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.3295118613703302 \cdot 10^{-13}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 3.29545095081340793 \cdot 10^{65}:\\
\;\;\;\;\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 r80458 = b;
double r80459 = -r80458;
double r80460 = r80458 * r80458;
double r80461 = 4.0;
double r80462 = a;
double r80463 = c;
double r80464 = r80462 * r80463;
double r80465 = r80461 * r80464;
double r80466 = r80460 - r80465;
double r80467 = sqrt(r80466);
double r80468 = r80459 - r80467;
double r80469 = 2.0;
double r80470 = r80469 * r80462;
double r80471 = r80468 / r80470;
return r80471;
}
double f(double a, double b, double c) {
double r80472 = b;
double r80473 = -1.3295118613703302e-13;
bool r80474 = r80472 <= r80473;
double r80475 = -1.0;
double r80476 = c;
double r80477 = r80476 / r80472;
double r80478 = r80475 * r80477;
double r80479 = 3.295450950813408e+65;
bool r80480 = r80472 <= r80479;
double r80481 = -r80472;
double r80482 = r80472 * r80472;
double r80483 = 4.0;
double r80484 = a;
double r80485 = r80484 * r80476;
double r80486 = r80483 * r80485;
double r80487 = r80482 - r80486;
double r80488 = sqrt(r80487);
double r80489 = r80481 - r80488;
double r80490 = 1.0;
double r80491 = 2.0;
double r80492 = r80491 * r80484;
double r80493 = r80490 / r80492;
double r80494 = r80489 * r80493;
double r80495 = 1.0;
double r80496 = r80472 / r80484;
double r80497 = r80477 - r80496;
double r80498 = r80495 * r80497;
double r80499 = r80480 ? r80494 : r80498;
double r80500 = r80474 ? r80478 : r80499;
return r80500;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.7 |
|---|---|
| Target | 21.0 |
| Herbie | 10.5 |
if b < -1.3295118613703302e-13Initial program 55.0
Taylor expanded around -inf 6.9
if -1.3295118613703302e-13 < b < 3.295450950813408e+65Initial program 15.4
rmApplied div-inv15.5
if 3.295450950813408e+65 < b Initial program 40.0
Taylor expanded around inf 4.7
Simplified4.7
Final simplification10.5
herbie shell --seed 2020057 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:precision binary64
:herbie-target
(if (< b 0.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)))