0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \cdot im \le 6.249293545362490289613501387551416785833 \cdot 10^{-311}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \cdot im \le 3.475769164625259191563207807351624661806 \cdot 10^{60}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\
\mathbf{elif}\;im \cdot im \le 4.18088721013597721819721293488303477502 \cdot 10^{113}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \cdot im \le 1.606608869031663108780796224948697957317 \cdot 10^{272}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\sqrt{\sqrt[3]{{\left({\left(re \cdot re + im \cdot im\right)}^{\left(\sqrt{\frac{2}{3}}\right)}\right)}^{\left(\sqrt{\frac{2}{3}}\right)}}} \cdot \left|\sqrt[3]{{re}^{2} + {im}^{2}}\right|\right) \cdot \sqrt{\sqrt[3]{e^{\log \left(\sqrt[3]{re \cdot re + im \cdot im}\right)}}} - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r27670 = 0.5;
double r27671 = 2.0;
double r27672 = re;
double r27673 = r27672 * r27672;
double r27674 = im;
double r27675 = r27674 * r27674;
double r27676 = r27673 + r27675;
double r27677 = sqrt(r27676);
double r27678 = r27677 - r27672;
double r27679 = r27671 * r27678;
double r27680 = sqrt(r27679);
double r27681 = r27670 * r27680;
return r27681;
}
double f(double re, double im) {
double r27682 = im;
double r27683 = r27682 * r27682;
double r27684 = 6.2492935453625e-311;
bool r27685 = r27683 <= r27684;
double r27686 = 0.5;
double r27687 = 2.0;
double r27688 = -2.0;
double r27689 = re;
double r27690 = r27688 * r27689;
double r27691 = r27687 * r27690;
double r27692 = sqrt(r27691);
double r27693 = r27686 * r27692;
double r27694 = 3.475769164625259e+60;
bool r27695 = r27683 <= r27694;
double r27696 = r27687 * r27683;
double r27697 = sqrt(r27696);
double r27698 = r27689 * r27689;
double r27699 = r27698 + r27683;
double r27700 = sqrt(r27699);
double r27701 = r27700 + r27689;
double r27702 = sqrt(r27701);
double r27703 = r27697 / r27702;
double r27704 = r27686 * r27703;
double r27705 = 4.180887210135977e+113;
bool r27706 = r27683 <= r27705;
double r27707 = 1.606608869031663e+272;
bool r27708 = r27683 <= r27707;
double r27709 = 0.6666666666666666;
double r27710 = sqrt(r27709);
double r27711 = pow(r27699, r27710);
double r27712 = pow(r27711, r27710);
double r27713 = cbrt(r27712);
double r27714 = sqrt(r27713);
double r27715 = 2.0;
double r27716 = pow(r27689, r27715);
double r27717 = pow(r27682, r27715);
double r27718 = r27716 + r27717;
double r27719 = cbrt(r27718);
double r27720 = fabs(r27719);
double r27721 = r27714 * r27720;
double r27722 = cbrt(r27699);
double r27723 = log(r27722);
double r27724 = exp(r27723);
double r27725 = cbrt(r27724);
double r27726 = sqrt(r27725);
double r27727 = r27721 * r27726;
double r27728 = r27727 - r27689;
double r27729 = r27687 * r27728;
double r27730 = sqrt(r27729);
double r27731 = r27686 * r27730;
double r27732 = r27682 - r27689;
double r27733 = r27687 * r27732;
double r27734 = sqrt(r27733);
double r27735 = r27686 * r27734;
double r27736 = r27708 ? r27731 : r27735;
double r27737 = r27706 ? r27693 : r27736;
double r27738 = r27695 ? r27704 : r27737;
double r27739 = r27685 ? r27693 : r27738;
return r27739;
}



Bits error versus re



Bits error versus im
Results
if (* im im) < 6.2492935453625e-311 or 3.475769164625259e+60 < (* im im) < 4.180887210135977e+113Initial program 41.2
Taylor expanded around -inf 37.2
if 6.2492935453625e-311 < (* im im) < 3.475769164625259e+60Initial program 26.2
rmApplied flip--37.0
Applied associate-*r/37.0
Applied sqrt-div37.2
Simplified26.2
if 4.180887210135977e+113 < (* im im) < 1.606608869031663e+272Initial program 16.8
rmApplied add-cube-cbrt17.0
Applied sqrt-prod17.1
Simplified17.1
rmApplied add-cube-cbrt17.1
Applied cbrt-prod17.1
Applied sqrt-prod17.1
Applied associate-*r*17.1
Simplified19.3
rmApplied add-exp-log19.2
rmApplied add-sqr-sqrt19.2
Applied pow-unpow18.1
if 1.606608869031663e+272 < (* im im) Initial program 59.1
Taylor expanded around 0 36.2
Final simplification31.1
herbie shell --seed 2019326
(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)))))