\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 1.57421875:\\
\;\;\;\;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 r1074037 = 0.5;
double r1074038 = /* ERROR: no posit support in C */;
double r1074039 = 2.0;
double r1074040 = /* ERROR: no posit support in C */;
double r1074041 = re;
double r1074042 = r1074041 * r1074041;
double r1074043 = im;
double r1074044 = r1074043 * r1074043;
double r1074045 = r1074042 + r1074044;
double r1074046 = sqrt(r1074045);
double r1074047 = r1074046 - r1074041;
double r1074048 = r1074040 * r1074047;
double r1074049 = sqrt(r1074048);
double r1074050 = r1074038 * r1074049;
return r1074050;
}
double f(double re, double im) {
double r1074051 = re;
double r1074052 = 1.57421875;
bool r1074053 = r1074051 <= r1074052;
double r1074054 = 0.5;
double r1074055 = 2.0;
double r1074056 = r1074051 * r1074051;
double r1074057 = im;
double r1074058 = r1074057 * r1074057;
double r1074059 = r1074056 + r1074058;
double r1074060 = sqrt(r1074059);
double r1074061 = r1074060 - r1074051;
double r1074062 = r1074055 * r1074061;
double r1074063 = sqrt(r1074062);
double r1074064 = r1074054 * r1074063;
double r1074065 = r1074058 + r1074056;
double r1074066 = sqrt(r1074065);
double r1074067 = r1074051 + r1074066;
double r1074068 = r1074067 * r1074058;
double r1074069 = r1074060 + r1074051;
double r1074070 = r1074069 * r1074069;
double r1074071 = r1074068 / r1074070;
double r1074072 = r1074055 * r1074071;
double r1074073 = sqrt(r1074072);
double r1074074 = r1074054 * r1074073;
double r1074075 = r1074053 ? r1074064 : r1074074;
return r1074075;
}



Bits error versus re



Bits error versus im
if re < 1.57421875Initial program 0.9
if 1.57421875 < re Initial program 6.2
rmApplied p16-flip--5.5
rmApplied difference-of-squares6.3
rmApplied p16-flip--5.5
Applied associate-*r/6.0
Applied associate-/l/6.0
Simplified2.1
Final simplification1.2
herbie shell --seed 2019112
(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)))))