\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 r1101478 = 0.5;
double r1101479 = /* ERROR: no posit support in C */;
double r1101480 = 2.0;
double r1101481 = /* ERROR: no posit support in C */;
double r1101482 = re;
double r1101483 = r1101482 * r1101482;
double r1101484 = im;
double r1101485 = r1101484 * r1101484;
double r1101486 = r1101483 + r1101485;
double r1101487 = sqrt(r1101486);
double r1101488 = r1101487 - r1101482;
double r1101489 = r1101481 * r1101488;
double r1101490 = sqrt(r1101489);
double r1101491 = r1101479 * r1101490;
return r1101491;
}
double f(double re, double im) {
double r1101492 = re;
double r1101493 = 0.876953125;
bool r1101494 = r1101492 <= r1101493;
double r1101495 = 0.5;
double r1101496 = 2.0;
double r1101497 = r1101492 * r1101492;
double r1101498 = im;
double r1101499 = r1101498 * r1101498;
double r1101500 = r1101497 + r1101499;
double r1101501 = sqrt(r1101500);
double r1101502 = r1101501 - r1101492;
double r1101503 = r1101496 * r1101502;
double r1101504 = sqrt(r1101503);
double r1101505 = r1101495 * r1101504;
double r1101506 = r1101499 + r1101497;
double r1101507 = sqrt(r1101506);
double r1101508 = r1101492 + r1101507;
double r1101509 = r1101508 * r1101499;
double r1101510 = r1101501 + r1101492;
double r1101511 = r1101510 * r1101510;
double r1101512 = r1101509 / r1101511;
double r1101513 = r1101496 * r1101512;
double r1101514 = sqrt(r1101513);
double r1101515 = r1101495 * r1101514;
double r1101516 = r1101494 ? r1101505 : r1101515;
return r1101516;
}



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 +o rules:numerics
(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)))))