\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.680329042988888396603264581948851078331 \cdot 10^{148}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le 4.612990823111230552052602417245542305295 \cdot 10^{-104}:\\
\;\;\;\;\frac{\frac{1}{a}}{2} \cdot \left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b\right)\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r4564439 = b;
double r4564440 = -r4564439;
double r4564441 = r4564439 * r4564439;
double r4564442 = 4.0;
double r4564443 = a;
double r4564444 = c;
double r4564445 = r4564443 * r4564444;
double r4564446 = r4564442 * r4564445;
double r4564447 = r4564441 - r4564446;
double r4564448 = sqrt(r4564447);
double r4564449 = r4564440 + r4564448;
double r4564450 = 2.0;
double r4564451 = r4564450 * r4564443;
double r4564452 = r4564449 / r4564451;
return r4564452;
}
double f(double a, double b, double c) {
double r4564453 = b;
double r4564454 = -3.6803290429888884e+148;
bool r4564455 = r4564453 <= r4564454;
double r4564456 = c;
double r4564457 = r4564456 / r4564453;
double r4564458 = a;
double r4564459 = r4564453 / r4564458;
double r4564460 = r4564457 - r4564459;
double r4564461 = 1.0;
double r4564462 = r4564460 * r4564461;
double r4564463 = 4.6129908231112306e-104;
bool r4564464 = r4564453 <= r4564463;
double r4564465 = 1.0;
double r4564466 = r4564465 / r4564458;
double r4564467 = 2.0;
double r4564468 = r4564466 / r4564467;
double r4564469 = r4564453 * r4564453;
double r4564470 = 4.0;
double r4564471 = r4564470 * r4564458;
double r4564472 = r4564471 * r4564456;
double r4564473 = r4564469 - r4564472;
double r4564474 = sqrt(r4564473);
double r4564475 = r4564474 - r4564453;
double r4564476 = r4564468 * r4564475;
double r4564477 = -1.0;
double r4564478 = r4564477 * r4564457;
double r4564479 = r4564464 ? r4564476 : r4564478;
double r4564480 = r4564455 ? r4564462 : r4564479;
return r4564480;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.9 |
|---|---|
| Target | 21.3 |
| Herbie | 10.1 |
if b < -3.6803290429888884e+148Initial program 62.1
Simplified62.1
Taylor expanded around -inf 2.3
Simplified2.3
if -3.6803290429888884e+148 < b < 4.6129908231112306e-104Initial program 12.2
Simplified12.2
rmApplied *-un-lft-identity12.2
Applied div-inv12.3
Applied times-frac12.3
Simplified12.3
if 4.6129908231112306e-104 < b Initial program 52.7
Simplified52.7
Taylor expanded around inf 9.8
Final simplification10.1
herbie shell --seed 2019170
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))