\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.6806111715441095 \cdot 10^{-29}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le -2.5349830112643849 \cdot 10^{-83}:\\
\;\;\;\;\frac{\frac{4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}{2 \cdot a}\\
\mathbf{elif}\;b \le 5.9911994584698608 \cdot 10^{103}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r80457 = b;
double r80458 = -r80457;
double r80459 = r80457 * r80457;
double r80460 = 4.0;
double r80461 = a;
double r80462 = c;
double r80463 = r80461 * r80462;
double r80464 = r80460 * r80463;
double r80465 = r80459 - r80464;
double r80466 = sqrt(r80465);
double r80467 = r80458 - r80466;
double r80468 = 2.0;
double r80469 = r80468 * r80461;
double r80470 = r80467 / r80469;
return r80470;
}
double f(double a, double b, double c) {
double r80471 = b;
double r80472 = -1.6806111715441095e-29;
bool r80473 = r80471 <= r80472;
double r80474 = -1.0;
double r80475 = c;
double r80476 = r80475 / r80471;
double r80477 = r80474 * r80476;
double r80478 = -2.534983011264385e-83;
bool r80479 = r80471 <= r80478;
double r80480 = 4.0;
double r80481 = a;
double r80482 = r80481 * r80475;
double r80483 = r80480 * r80482;
double r80484 = r80471 * r80471;
double r80485 = r80484 - r80483;
double r80486 = sqrt(r80485);
double r80487 = r80486 - r80471;
double r80488 = r80483 / r80487;
double r80489 = 2.0;
double r80490 = r80489 * r80481;
double r80491 = r80488 / r80490;
double r80492 = 5.991199458469861e+103;
bool r80493 = r80471 <= r80492;
double r80494 = 1.0;
double r80495 = -r80471;
double r80496 = r80495 - r80486;
double r80497 = r80490 / r80496;
double r80498 = r80494 / r80497;
double r80499 = 1.0;
double r80500 = r80471 / r80481;
double r80501 = r80476 - r80500;
double r80502 = r80499 * r80501;
double r80503 = r80493 ? r80498 : r80502;
double r80504 = r80479 ? r80491 : r80503;
double r80505 = r80473 ? r80477 : r80504;
return r80505;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.7 |
|---|---|
| Target | 20.6 |
| Herbie | 9.1 |
if b < -1.6806111715441095e-29Initial program 54.8
Taylor expanded around -inf 6.6
if -1.6806111715441095e-29 < b < -2.534983011264385e-83Initial program 32.9
rmApplied flip--32.9
Simplified16.9
Simplified16.9
if -2.534983011264385e-83 < b < 5.991199458469861e+103Initial program 12.0
rmApplied clear-num12.1
if 5.991199458469861e+103 < b Initial program 48.7
Taylor expanded around inf 4.1
Simplified4.1
Final simplification9.1
herbie shell --seed 2019198
(FPCore (a b c)
:name "The quadratic formula (r2)"
: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)))