0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -2.9246267864345723 \cdot 10^{+141}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-2.0\right) \cdot \left(re + im\right)}\\
\mathbf{elif}\;im \le -4.059577396294607 \cdot 10^{-207}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{elif}\;im \le 5.507442474902197 \cdot 10^{-296}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 6.856126058625656 \cdot 10^{-252}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\frac{\left|im\right|}{re + re} \cdot \left|im\right|\right) \cdot 2.0}\\
\mathbf{elif}\;im \le 3.702479024316318 \cdot 10^{-159}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 1.2706613329577357 \cdot 10^{-100}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{im \cdot \left(2.0 \cdot im\right)}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\
\mathbf{elif}\;im \le 5.609908877325638 \cdot 10^{-78}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 8.867415664754299 \cdot 10^{+43}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{re + im}\right)}\\
\end{array}double f(double re, double im) {
double r405102 = 0.5;
double r405103 = 2.0;
double r405104 = re;
double r405105 = r405104 * r405104;
double r405106 = im;
double r405107 = r405106 * r405106;
double r405108 = r405105 + r405107;
double r405109 = sqrt(r405108);
double r405110 = r405109 - r405104;
double r405111 = r405103 * r405110;
double r405112 = sqrt(r405111);
double r405113 = r405102 * r405112;
return r405113;
}
double f(double re, double im) {
double r405114 = im;
double r405115 = -2.9246267864345723e+141;
bool r405116 = r405114 <= r405115;
double r405117 = 0.5;
double r405118 = 2.0;
double r405119 = -r405118;
double r405120 = re;
double r405121 = r405120 + r405114;
double r405122 = r405119 * r405121;
double r405123 = sqrt(r405122);
double r405124 = r405117 * r405123;
double r405125 = -4.059577396294607e-207;
bool r405126 = r405114 <= r405125;
double r405127 = r405120 * r405120;
double r405128 = r405114 * r405114;
double r405129 = r405127 + r405128;
double r405130 = sqrt(r405129);
double r405131 = r405130 - r405120;
double r405132 = r405118 * r405131;
double r405133 = sqrt(r405132);
double r405134 = r405117 * r405133;
double r405135 = 5.507442474902197e-296;
bool r405136 = r405114 <= r405135;
double r405137 = -2.0;
double r405138 = r405137 * r405120;
double r405139 = r405118 * r405138;
double r405140 = sqrt(r405139);
double r405141 = r405117 * r405140;
double r405142 = 6.856126058625656e-252;
bool r405143 = r405114 <= r405142;
double r405144 = fabs(r405114);
double r405145 = r405120 + r405120;
double r405146 = r405144 / r405145;
double r405147 = r405146 * r405144;
double r405148 = r405147 * r405118;
double r405149 = sqrt(r405148);
double r405150 = r405117 * r405149;
double r405151 = 3.702479024316318e-159;
bool r405152 = r405114 <= r405151;
double r405153 = 1.2706613329577357e-100;
bool r405154 = r405114 <= r405153;
double r405155 = r405118 * r405114;
double r405156 = r405114 * r405155;
double r405157 = sqrt(r405156);
double r405158 = r405130 + r405120;
double r405159 = sqrt(r405158);
double r405160 = r405157 / r405159;
double r405161 = r405117 * r405160;
double r405162 = 5.609908877325638e-78;
bool r405163 = r405114 <= r405162;
double r405164 = 8.867415664754299e+43;
bool r405165 = r405114 <= r405164;
double r405166 = r405144 / r405121;
double r405167 = r405144 * r405166;
double r405168 = r405118 * r405167;
double r405169 = sqrt(r405168);
double r405170 = r405117 * r405169;
double r405171 = r405165 ? r405134 : r405170;
double r405172 = r405163 ? r405141 : r405171;
double r405173 = r405154 ? r405161 : r405172;
double r405174 = r405152 ? r405141 : r405173;
double r405175 = r405143 ? r405150 : r405174;
double r405176 = r405136 ? r405141 : r405175;
double r405177 = r405126 ? r405134 : r405176;
double r405178 = r405116 ? r405124 : r405177;
return r405178;
}



Bits error versus re



Bits error versus im
Results
if im < -2.9246267864345723e+141Initial program 58.7
rmApplied add-sqr-sqrt58.7
rmApplied flip--58.7
Simplified58.7
Simplified58.7
Taylor expanded around -inf 8.6
if -2.9246267864345723e+141 < im < -4.059577396294607e-207 or 5.609908877325638e-78 < im < 8.867415664754299e+43Initial program 26.0
if -4.059577396294607e-207 < im < 5.507442474902197e-296 or 6.856126058625656e-252 < im < 3.702479024316318e-159 or 1.2706613329577357e-100 < im < 5.609908877325638e-78Initial program 40.9
Taylor expanded around -inf 35.0
if 5.507442474902197e-296 < im < 6.856126058625656e-252Initial program 40.1
rmApplied add-sqr-sqrt42.6
rmApplied flip--58.5
Simplified50.5
Simplified50.5
rmApplied *-un-lft-identity50.5
Applied add-sqr-sqrt50.5
Applied times-frac50.5
Simplified50.5
Simplified50.0
Taylor expanded around inf 48.0
if 3.702479024316318e-159 < im < 1.2706613329577357e-100Initial program 29.1
rmApplied add-sqr-sqrt29.2
rmApplied flip--42.4
Simplified34.1
Simplified34.0
rmApplied associate-*r/34.0
Applied sqrt-div30.0
Simplified30.0
if 8.867415664754299e+43 < im Initial program 43.7
rmApplied add-sqr-sqrt43.7
rmApplied flip--44.9
Simplified44.1
Simplified44.0
rmApplied *-un-lft-identity44.0
Applied add-sqr-sqrt44.0
Applied times-frac44.0
Simplified44.0
Simplified44.7
Taylor expanded around 0 12.3
Final simplification23.6
herbie shell --seed 2019151
(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)))))