\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 -0.1973887031618163923063491438369965180755:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{elif}\;b \le 1.724197465942408751027868496272110613308 \cdot 10^{-216}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{elif}\;b \le 813278.22458350402303040027618408203125:\\
\;\;\;\;\frac{\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r41508 = b;
double r41509 = -r41508;
double r41510 = r41508 * r41508;
double r41511 = 4.0;
double r41512 = a;
double r41513 = c;
double r41514 = r41512 * r41513;
double r41515 = r41511 * r41514;
double r41516 = r41510 - r41515;
double r41517 = sqrt(r41516);
double r41518 = r41509 + r41517;
double r41519 = 2.0;
double r41520 = r41519 * r41512;
double r41521 = r41518 / r41520;
return r41521;
}
double f(double a, double b, double c) {
double r41522 = b;
double r41523 = -0.1973887031618164;
bool r41524 = r41522 <= r41523;
double r41525 = 1.0;
double r41526 = c;
double r41527 = r41526 / r41522;
double r41528 = a;
double r41529 = r41522 / r41528;
double r41530 = r41527 - r41529;
double r41531 = r41525 * r41530;
double r41532 = 1.7241974659424088e-216;
bool r41533 = r41522 <= r41532;
double r41534 = -r41522;
double r41535 = r41522 * r41522;
double r41536 = 4.0;
double r41537 = r41528 * r41526;
double r41538 = r41536 * r41537;
double r41539 = r41535 - r41538;
double r41540 = sqrt(r41539);
double r41541 = r41534 + r41540;
double r41542 = 2.0;
double r41543 = r41542 * r41528;
double r41544 = r41541 / r41543;
double r41545 = 813278.224583504;
bool r41546 = r41522 <= r41545;
double r41547 = 0.0;
double r41548 = r41547 + r41538;
double r41549 = r41534 - r41540;
double r41550 = r41548 / r41549;
double r41551 = r41550 / r41543;
double r41552 = -1.0;
double r41553 = r41552 * r41527;
double r41554 = r41546 ? r41551 : r41553;
double r41555 = r41533 ? r41544 : r41554;
double r41556 = r41524 ? r41531 : r41555;
return r41556;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 21.4 |
| Herbie | 9.9 |
if b < -0.1973887031618164Initial program 32.2
Taylor expanded around -inf 8.0
Simplified8.0
if -0.1973887031618164 < b < 1.7241974659424088e-216Initial program 11.8
if 1.7241974659424088e-216 < b < 813278.224583504Initial program 28.8
rmApplied flip-+28.9
Simplified17.9
if 813278.224583504 < b Initial program 55.9
Taylor expanded around inf 5.8
Final simplification9.9
herbie shell --seed 2019308
(FPCore (a b c)
:name "quadp (p42, positive)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))