0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -9.735645360863155 \cdot 10^{-247}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2.0}\\
\mathbf{elif}\;im \le 1.1260714228031905 \cdot 10^{-171}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(re \cdot -2\right)} \cdot 0.5\\
\mathbf{elif}\;im \le 1.7084160018085855 \cdot 10^{+61}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\left(\sqrt{\left|\sqrt[3]{im \cdot im + re \cdot re}\right|} \cdot \sqrt{\left|\sqrt[3]{im \cdot im + re \cdot re}\right| \cdot \sqrt{\sqrt[3]{im \cdot im + re \cdot re}}}\right) \cdot \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} - re\right) \cdot 2.0}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r988753 = 0.5;
double r988754 = 2.0;
double r988755 = re;
double r988756 = r988755 * r988755;
double r988757 = im;
double r988758 = r988757 * r988757;
double r988759 = r988756 + r988758;
double r988760 = sqrt(r988759);
double r988761 = r988760 - r988755;
double r988762 = r988754 * r988761;
double r988763 = sqrt(r988762);
double r988764 = r988753 * r988763;
return r988764;
}
double f(double re, double im) {
double r988765 = im;
double r988766 = -9.735645360863155e-247;
bool r988767 = r988765 <= r988766;
double r988768 = 0.5;
double r988769 = r988765 * r988765;
double r988770 = re;
double r988771 = r988770 * r988770;
double r988772 = r988769 + r988771;
double r988773 = sqrt(r988772);
double r988774 = r988770 + r988773;
double r988775 = r988769 / r988774;
double r988776 = 2.0;
double r988777 = r988775 * r988776;
double r988778 = sqrt(r988777);
double r988779 = r988768 * r988778;
double r988780 = 1.1260714228031905e-171;
bool r988781 = r988765 <= r988780;
double r988782 = -2.0;
double r988783 = r988770 * r988782;
double r988784 = r988776 * r988783;
double r988785 = sqrt(r988784);
double r988786 = r988785 * r988768;
double r988787 = 1.7084160018085855e+61;
bool r988788 = r988765 <= r988787;
double r988789 = cbrt(r988772);
double r988790 = fabs(r988789);
double r988791 = sqrt(r988790);
double r988792 = sqrt(r988789);
double r988793 = r988790 * r988792;
double r988794 = sqrt(r988793);
double r988795 = r988791 * r988794;
double r988796 = sqrt(r988792);
double r988797 = r988795 * r988796;
double r988798 = r988797 - r988770;
double r988799 = r988798 * r988776;
double r988800 = sqrt(r988799);
double r988801 = r988768 * r988800;
double r988802 = r988765 - r988770;
double r988803 = r988776 * r988802;
double r988804 = sqrt(r988803);
double r988805 = r988768 * r988804;
double r988806 = r988788 ? r988801 : r988805;
double r988807 = r988781 ? r988786 : r988806;
double r988808 = r988767 ? r988779 : r988807;
return r988808;
}



Bits error versus re



Bits error versus im
Results
if im < -9.735645360863155e-247Initial program 36.8
rmApplied add-sqr-sqrt36.8
Applied sqrt-prod36.8
rmApplied flip--43.1
Simplified39.3
Simplified39.3
if -9.735645360863155e-247 < im < 1.1260714228031905e-171Initial program 41.8
Taylor expanded around -inf 33.8
if 1.1260714228031905e-171 < im < 1.7084160018085855e+61Initial program 24.9
rmApplied add-sqr-sqrt24.9
Applied sqrt-prod25.0
rmApplied add-cube-cbrt25.1
Applied sqrt-prod25.1
Applied sqrt-prod25.1
Applied associate-*r*25.1
Simplified25.1
rmApplied add-cube-cbrt25.2
Applied sqrt-prod25.2
Simplified25.2
if 1.7084160018085855e+61 < im Initial program 44.3
Taylor expanded around 0 11.0
Final simplification30.0
herbie shell --seed 2019158
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
(* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))