0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -4.401660052897909132614101168939860146664 \cdot 10^{-161}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\left(\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}\right) \cdot \sqrt[3]{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;im \le -2.172887328838732504262895232782467753864 \cdot 10^{-298}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 5.136932717067223462435017556148010291487 \cdot 10^{-273}:\\
\;\;\;\;0\\
\mathbf{elif}\;im \le 3.983764504348168358043013809472625949076 \cdot 10^{-85}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r22867 = 0.5;
double r22868 = 2.0;
double r22869 = re;
double r22870 = r22869 * r22869;
double r22871 = im;
double r22872 = r22871 * r22871;
double r22873 = r22870 + r22872;
double r22874 = sqrt(r22873);
double r22875 = r22874 - r22869;
double r22876 = r22868 * r22875;
double r22877 = sqrt(r22876);
double r22878 = r22867 * r22877;
return r22878;
}
double f(double re, double im) {
double r22879 = im;
double r22880 = -4.401660052897909e-161;
bool r22881 = r22879 <= r22880;
double r22882 = 0.5;
double r22883 = 2.0;
double r22884 = re;
double r22885 = r22884 * r22884;
double r22886 = r22879 * r22879;
double r22887 = r22885 + r22886;
double r22888 = cbrt(r22887);
double r22889 = r22888 * r22888;
double r22890 = r22889 * r22888;
double r22891 = sqrt(r22890);
double r22892 = r22891 - r22884;
double r22893 = r22883 * r22892;
double r22894 = sqrt(r22893);
double r22895 = r22882 * r22894;
double r22896 = -2.1728873288387325e-298;
bool r22897 = r22879 <= r22896;
double r22898 = -2.0;
double r22899 = r22898 * r22884;
double r22900 = r22883 * r22899;
double r22901 = sqrt(r22900);
double r22902 = r22882 * r22901;
double r22903 = 5.1369327170672235e-273;
bool r22904 = r22879 <= r22903;
double r22905 = 0.0;
double r22906 = 3.9837645043481684e-85;
bool r22907 = r22879 <= r22906;
double r22908 = r22879 - r22884;
double r22909 = r22883 * r22908;
double r22910 = sqrt(r22909);
double r22911 = r22882 * r22910;
double r22912 = r22907 ? r22902 : r22911;
double r22913 = r22904 ? r22905 : r22912;
double r22914 = r22897 ? r22902 : r22913;
double r22915 = r22881 ? r22895 : r22914;
return r22915;
}



Bits error versus re



Bits error versus im
Results
if im < -4.401660052897909e-161Initial program 37.1
rmApplied add-cube-cbrt37.3
if -4.401660052897909e-161 < im < -2.1728873288387325e-298 or 5.1369327170672235e-273 < im < 3.9837645043481684e-85Initial program 40.7
Taylor expanded around -inf 36.8
if -2.1728873288387325e-298 < im < 5.1369327170672235e-273Initial program 40.7
Taylor expanded around inf 47.8
if 3.9837645043481684e-85 < im Initial program 38.3
Taylor expanded around 0 18.3
Final simplification31.5
herbie shell --seed 2019323
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
:precision binary64
(* 0.5 (sqrt (* 2 (- (sqrt (+ (* re re) (* im im))) re)))))