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(\left(-re\right) - 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(\left(-re\right) - 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 r27646 = 0.5;
double r27647 = 2.0;
double r27648 = re;
double r27649 = r27648 * r27648;
double r27650 = im;
double r27651 = r27650 * r27650;
double r27652 = r27649 + r27651;
double r27653 = sqrt(r27652);
double r27654 = r27653 - r27648;
double r27655 = r27647 * r27654;
double r27656 = sqrt(r27655);
double r27657 = r27646 * r27656;
return r27657;
}
double f(double re, double im) {
double r27658 = im;
double r27659 = r27658 * r27658;
double r27660 = 6.2492935453625e-311;
bool r27661 = r27659 <= r27660;
double r27662 = 0.5;
double r27663 = 2.0;
double r27664 = re;
double r27665 = -r27664;
double r27666 = r27665 - r27664;
double r27667 = r27663 * r27666;
double r27668 = sqrt(r27667);
double r27669 = r27662 * r27668;
double r27670 = 3.475769164625259e+60;
bool r27671 = r27659 <= r27670;
double r27672 = r27663 * r27659;
double r27673 = sqrt(r27672);
double r27674 = r27664 * r27664;
double r27675 = r27674 + r27659;
double r27676 = sqrt(r27675);
double r27677 = r27676 + r27664;
double r27678 = sqrt(r27677);
double r27679 = r27673 / r27678;
double r27680 = r27662 * r27679;
double r27681 = 4.180887210135977e+113;
bool r27682 = r27659 <= r27681;
double r27683 = 1.606608869031663e+272;
bool r27684 = r27659 <= r27683;
double r27685 = 0.6666666666666666;
double r27686 = sqrt(r27685);
double r27687 = pow(r27675, r27686);
double r27688 = pow(r27687, r27686);
double r27689 = cbrt(r27688);
double r27690 = sqrt(r27689);
double r27691 = 2.0;
double r27692 = pow(r27664, r27691);
double r27693 = pow(r27658, r27691);
double r27694 = r27692 + r27693;
double r27695 = cbrt(r27694);
double r27696 = fabs(r27695);
double r27697 = r27690 * r27696;
double r27698 = cbrt(r27675);
double r27699 = log(r27698);
double r27700 = exp(r27699);
double r27701 = cbrt(r27700);
double r27702 = sqrt(r27701);
double r27703 = r27697 * r27702;
double r27704 = r27703 - r27664;
double r27705 = r27663 * r27704;
double r27706 = sqrt(r27705);
double r27707 = r27662 * r27706;
double r27708 = r27658 - r27664;
double r27709 = r27663 * r27708;
double r27710 = sqrt(r27709);
double r27711 = r27662 * r27710;
double r27712 = r27684 ? r27707 : r27711;
double r27713 = r27682 ? r27669 : r27712;
double r27714 = r27671 ? r27680 : r27713;
double r27715 = r27661 ? r27669 : r27714;
return r27715;
}



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
Simplified37.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)))))