0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -8.327291769824926841401075351927810391987 \cdot 10^{77}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - im\right)}\\
\mathbf{elif}\;im \le -3.26719083601556541364004422304594603907 \cdot 10^{-65}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2}\\
\mathbf{elif}\;im \le 7.975663580255671195689526281654404577475 \cdot 10^{-75}:\\
\;\;\;\;\sqrt{\left(\left(-re\right) - re\right) \cdot 2} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2}\\
\end{array}double f(double re, double im) {
double r24793 = 0.5;
double r24794 = 2.0;
double r24795 = re;
double r24796 = r24795 * r24795;
double r24797 = im;
double r24798 = r24797 * r24797;
double r24799 = r24796 + r24798;
double r24800 = sqrt(r24799);
double r24801 = r24800 - r24795;
double r24802 = r24794 * r24801;
double r24803 = sqrt(r24802);
double r24804 = r24793 * r24803;
return r24804;
}
double f(double re, double im) {
double r24805 = im;
double r24806 = -8.327291769824927e+77;
bool r24807 = r24805 <= r24806;
double r24808 = 0.5;
double r24809 = 2.0;
double r24810 = re;
double r24811 = -r24810;
double r24812 = r24811 - r24805;
double r24813 = r24809 * r24812;
double r24814 = sqrt(r24813);
double r24815 = r24808 * r24814;
double r24816 = -3.2671908360155654e-65;
bool r24817 = r24805 <= r24816;
double r24818 = r24805 * r24805;
double r24819 = r24810 * r24810;
double r24820 = r24818 + r24819;
double r24821 = sqrt(r24820);
double r24822 = r24810 + r24821;
double r24823 = r24818 / r24822;
double r24824 = r24823 * r24809;
double r24825 = sqrt(r24824);
double r24826 = r24808 * r24825;
double r24827 = 7.975663580255671e-75;
bool r24828 = r24805 <= r24827;
double r24829 = r24811 - r24810;
double r24830 = r24829 * r24809;
double r24831 = sqrt(r24830);
double r24832 = r24831 * r24808;
double r24833 = r24805 - r24810;
double r24834 = r24833 * r24809;
double r24835 = sqrt(r24834);
double r24836 = r24808 * r24835;
double r24837 = r24828 ? r24832 : r24836;
double r24838 = r24817 ? r24826 : r24837;
double r24839 = r24807 ? r24815 : r24838;
return r24839;
}



Bits error versus re



Bits error versus im
Results
if im < -8.327291769824927e+77Initial program 49.0
Simplified49.0
rmApplied add-exp-log50.1
Simplified50.1
Taylor expanded around -inf 12.0
Simplified12.0
if -8.327291769824927e+77 < im < -3.2671908360155654e-65Initial program 22.8
Simplified22.8
rmApplied flip--29.9
Simplified22.3
Simplified22.3
if -3.2671908360155654e-65 < im < 7.975663580255671e-75Initial program 39.0
Simplified39.0
rmApplied add-exp-log41.7
Simplified41.7
rmApplied add-cube-cbrt41.8
Applied log-prod41.9
Applied exp-sum41.7
Simplified41.7
Simplified41.6
rmApplied add-exp-log41.8
Simplified41.7
Taylor expanded around -inf 38.1
Simplified38.1
if 7.975663580255671e-75 < im Initial program 38.4
Simplified38.4
Taylor expanded around 0 17.4
Final simplification25.0
herbie shell --seed 2019179
(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)))))