\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.014678955078125:\\
\;\;\;\;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{im}{\frac{\sqrt{re \cdot re + im \cdot im} + re}{im}}}\\
\end{array}double f(double re, double im) {
double r1001958 = 0.5;
double r1001959 = /* ERROR: no posit support in C */;
double r1001960 = 2.0;
double r1001961 = /* ERROR: no posit support in C */;
double r1001962 = re;
double r1001963 = r1001962 * r1001962;
double r1001964 = im;
double r1001965 = r1001964 * r1001964;
double r1001966 = r1001963 + r1001965;
double r1001967 = sqrt(r1001966);
double r1001968 = r1001967 - r1001962;
double r1001969 = r1001961 * r1001968;
double r1001970 = sqrt(r1001969);
double r1001971 = r1001959 * r1001970;
return r1001971;
}
double f(double re, double im) {
double r1001972 = re;
double r1001973 = -0.014678955078125;
bool r1001974 = r1001972 <= r1001973;
double r1001975 = 0.5;
double r1001976 = 2.0;
double r1001977 = r1001972 * r1001972;
double r1001978 = im;
double r1001979 = r1001978 * r1001978;
double r1001980 = r1001977 + r1001979;
double r1001981 = sqrt(r1001980);
double r1001982 = r1001981 - r1001972;
double r1001983 = r1001976 * r1001982;
double r1001984 = sqrt(r1001983);
double r1001985 = r1001975 * r1001984;
double r1001986 = r1001981 + r1001972;
double r1001987 = r1001986 / r1001978;
double r1001988 = r1001978 / r1001987;
double r1001989 = r1001976 * r1001988;
double r1001990 = sqrt(r1001989);
double r1001991 = r1001975 * r1001990;
double r1001992 = r1001974 ? r1001985 : r1001991;
return r1001992;
}



Bits error versus re



Bits error versus im
if re < -0.014678955078125Initial program 0.7
if -0.014678955078125 < re Initial program 3.3
rmApplied p16-flip--3.0
Simplified0.9
rmApplied associate-/l*0.8
Final simplification0.8
herbie shell --seed 2019128 +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)))))