\left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right) - re\right)\right)}\right)\begin{array}{l}
\mathbf{if}\;re \le 0.876953125:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot \left(im \cdot im\right)}{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}}\\
\end{array}double f(double re, double im) {
double r807433 = 0.5;
double r807434 = /* ERROR: no posit support in C */;
double r807435 = 2.0;
double r807436 = /* ERROR: no posit support in C */;
double r807437 = re;
double r807438 = r807437 * r807437;
double r807439 = im;
double r807440 = r807439 * r807439;
double r807441 = r807438 + r807440;
double r807442 = sqrt(r807441);
double r807443 = r807442 - r807437;
double r807444 = r807436 * r807443;
double r807445 = sqrt(r807444);
double r807446 = r807434 * r807445;
return r807446;
}
double f(double re, double im) {
double r807447 = re;
double r807448 = 0.876953125;
bool r807449 = r807447 <= r807448;
double r807450 = 0.5;
double r807451 = 2.0;
double r807452 = r807447 * r807447;
double r807453 = im;
double r807454 = r807453 * r807453;
double r807455 = r807452 + r807454;
double r807456 = sqrt(r807455);
double r807457 = r807456 - r807447;
double r807458 = r807451 * r807457;
double r807459 = sqrt(r807458);
double r807460 = r807450 * r807459;
double r807461 = r807454 + r807452;
double r807462 = sqrt(r807461);
double r807463 = r807447 + r807462;
double r807464 = r807463 * r807454;
double r807465 = r807456 + r807447;
double r807466 = r807465 * r807465;
double r807467 = r807464 / r807466;
double r807468 = r807451 * r807467;
double r807469 = sqrt(r807468);
double r807470 = r807450 * r807469;
double r807471 = r807449 ? r807460 : r807470;
return r807471;
}



Bits error versus re



Bits error versus im
if re < 0.876953125Initial program 0.8
if 0.876953125 < re Initial program 5.3
rmApplied p16-flip--4.7
rmApplied difference-of-squares5.3
rmApplied p16-flip--4.7
Applied associate-*r/5.3
Applied associate-/l/5.3
Simplified2.1
Final simplification1.2
herbie shell --seed 2019107
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
(*.p16 (real->posit16 0.5) (sqrt.p16 (*.p16 (real->posit16 2.0) (-.p16 (sqrt.p16 (+.p16 (*.p16 re re) (*.p16 im im))) re)))))