0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -3.133313689967870834445494013025035211846 \cdot 10^{114}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;re \le -2.994155833278531802388158297765977679156 \cdot 10^{-164}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right) \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;re \le -1.435841514367864448151505165102991137359 \cdot 10^{-274}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;re \le 1.04092089734393064684781899004829158297 \cdot 10^{-280}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im \cdot \frac{im}{im + re}\right)}\\
\mathbf{elif}\;re \le 7.670159887084534463468521621657291548674 \cdot 10^{-217}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;re \le 1.546110109845155683121455826441872957199 \cdot 10^{118}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left|\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\right|\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im \cdot \frac{im}{re + re}\right)}\\
\end{array}double f(double re, double im) {
double r20776 = 0.5;
double r20777 = 2.0;
double r20778 = re;
double r20779 = r20778 * r20778;
double r20780 = im;
double r20781 = r20780 * r20780;
double r20782 = r20779 + r20781;
double r20783 = sqrt(r20782);
double r20784 = r20783 - r20778;
double r20785 = r20777 * r20784;
double r20786 = sqrt(r20785);
double r20787 = r20776 * r20786;
return r20787;
}
double f(double re, double im) {
double r20788 = re;
double r20789 = -3.133313689967871e+114;
bool r20790 = r20788 <= r20789;
double r20791 = 0.5;
double r20792 = 2.0;
double r20793 = -1.0;
double r20794 = r20793 * r20788;
double r20795 = r20794 - r20788;
double r20796 = r20792 * r20795;
double r20797 = sqrt(r20796);
double r20798 = r20791 * r20797;
double r20799 = -2.9941558332785318e-164;
bool r20800 = r20788 <= r20799;
double r20801 = r20788 * r20788;
double r20802 = im;
double r20803 = r20802 * r20802;
double r20804 = r20801 + r20803;
double r20805 = sqrt(r20804);
double r20806 = cbrt(r20805);
double r20807 = r20806 * r20806;
double r20808 = r20807 * r20806;
double r20809 = r20808 - r20788;
double r20810 = r20792 * r20809;
double r20811 = sqrt(r20810);
double r20812 = r20791 * r20811;
double r20813 = -1.4358415143678644e-274;
bool r20814 = r20788 <= r20813;
double r20815 = r20788 + r20802;
double r20816 = -r20815;
double r20817 = r20792 * r20816;
double r20818 = sqrt(r20817);
double r20819 = r20791 * r20818;
double r20820 = 1.0409208973439306e-280;
bool r20821 = r20788 <= r20820;
double r20822 = r20802 + r20788;
double r20823 = r20802 / r20822;
double r20824 = r20802 * r20823;
double r20825 = r20792 * r20824;
double r20826 = sqrt(r20825);
double r20827 = r20791 * r20826;
double r20828 = 7.670159887084534e-217;
bool r20829 = r20788 <= r20828;
double r20830 = 1.5461101098451557e+118;
bool r20831 = r20788 <= r20830;
double r20832 = sqrt(r20792);
double r20833 = r20805 + r20788;
double r20834 = sqrt(r20833);
double r20835 = r20802 / r20834;
double r20836 = fabs(r20835);
double r20837 = r20832 * r20836;
double r20838 = r20791 * r20837;
double r20839 = r20788 + r20788;
double r20840 = r20802 / r20839;
double r20841 = r20802 * r20840;
double r20842 = r20792 * r20841;
double r20843 = sqrt(r20842);
double r20844 = r20791 * r20843;
double r20845 = r20831 ? r20838 : r20844;
double r20846 = r20829 ? r20819 : r20845;
double r20847 = r20821 ? r20827 : r20846;
double r20848 = r20814 ? r20819 : r20847;
double r20849 = r20800 ? r20812 : r20848;
double r20850 = r20790 ? r20798 : r20849;
return r20850;
}



Bits error versus re



Bits error versus im
Results
if re < -3.133313689967871e+114Initial program 53.5
Taylor expanded around -inf 9.6
if -3.133313689967871e+114 < re < -2.9941558332785318e-164Initial program 16.0
rmApplied add-cube-cbrt16.5
if -2.9941558332785318e-164 < re < -1.4358415143678644e-274 or 1.0409208973439306e-280 < re < 7.670159887084534e-217Initial program 31.6
rmApplied flip--32.4
Simplified32.4
Taylor expanded around -inf 34.6
if -1.4358415143678644e-274 < re < 1.0409208973439306e-280Initial program 28.3
rmApplied flip--28.4
Simplified28.4
rmApplied *-un-lft-identity28.4
Applied add-sqr-sqrt47.3
Applied unpow-prod-down47.3
Applied times-frac47.0
Simplified47.0
Simplified27.9
Taylor expanded around 0 32.6
if 7.670159887084534e-217 < re < 1.5461101098451557e+118Initial program 40.0
rmApplied flip--39.9
Simplified30.4
rmApplied add-sqr-sqrt30.5
Applied add-sqr-sqrt47.5
Applied unpow-prod-down47.5
Applied times-frac46.3
Simplified46.2
Simplified28.1
rmApplied sqrt-prod28.1
Simplified17.8
if 1.5461101098451557e+118 < re Initial program 61.1
rmApplied flip--61.1
Simplified45.0
rmApplied *-un-lft-identity45.0
Applied add-sqr-sqrt55.5
Applied unpow-prod-down55.5
Applied times-frac55.3
Simplified55.3
Simplified44.6
Taylor expanded around inf 23.4
Final simplification20.2
herbie shell --seed 2019352
(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)))))