0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -5.5777813673616158 \cdot 10^{127}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le -4.72909341262804752 \cdot 10^{-264}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;re \le 1.27662858127337166 \cdot 10^{-281}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le 1.57299197465096736 \cdot 10^{106}:\\
\;\;\;\;0.5 \cdot \left(\left(\sqrt{2} \cdot \sqrt{\left|im\right|}\right) \cdot \frac{\sqrt{\left|im\right|}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{2 \cdot re}}\right)\\
\end{array}double f(double re, double im) {
double r22582 = 0.5;
double r22583 = 2.0;
double r22584 = re;
double r22585 = r22584 * r22584;
double r22586 = im;
double r22587 = r22586 * r22586;
double r22588 = r22585 + r22587;
double r22589 = sqrt(r22588);
double r22590 = r22589 - r22584;
double r22591 = r22583 * r22590;
double r22592 = sqrt(r22591);
double r22593 = r22582 * r22592;
return r22593;
}
double f(double re, double im) {
double r22594 = re;
double r22595 = -5.577781367361616e+127;
bool r22596 = r22594 <= r22595;
double r22597 = 0.5;
double r22598 = 2.0;
double r22599 = -2.0;
double r22600 = r22599 * r22594;
double r22601 = r22598 * r22600;
double r22602 = sqrt(r22601);
double r22603 = r22597 * r22602;
double r22604 = -4.7290934126280475e-264;
bool r22605 = r22594 <= r22604;
double r22606 = r22594 * r22594;
double r22607 = im;
double r22608 = r22607 * r22607;
double r22609 = r22606 + r22608;
double r22610 = cbrt(r22609);
double r22611 = fabs(r22610);
double r22612 = sqrt(r22610);
double r22613 = r22611 * r22612;
double r22614 = r22613 - r22594;
double r22615 = r22598 * r22614;
double r22616 = sqrt(r22615);
double r22617 = r22597 * r22616;
double r22618 = 1.2766285812733717e-281;
bool r22619 = r22594 <= r22618;
double r22620 = r22607 - r22594;
double r22621 = r22598 * r22620;
double r22622 = sqrt(r22621);
double r22623 = r22597 * r22622;
double r22624 = 1.5729919746509674e+106;
bool r22625 = r22594 <= r22624;
double r22626 = sqrt(r22598);
double r22627 = fabs(r22607);
double r22628 = sqrt(r22627);
double r22629 = r22626 * r22628;
double r22630 = sqrt(r22609);
double r22631 = r22630 + r22594;
double r22632 = sqrt(r22631);
double r22633 = r22628 / r22632;
double r22634 = r22629 * r22633;
double r22635 = r22597 * r22634;
double r22636 = 2.0;
double r22637 = r22636 * r22594;
double r22638 = sqrt(r22637);
double r22639 = r22627 / r22638;
double r22640 = r22626 * r22639;
double r22641 = r22597 * r22640;
double r22642 = r22625 ? r22635 : r22641;
double r22643 = r22619 ? r22623 : r22642;
double r22644 = r22605 ? r22617 : r22643;
double r22645 = r22596 ? r22603 : r22644;
return r22645;
}



Bits error versus re



Bits error versus im
Results
if re < -5.577781367361616e+127Initial program 56.4
Taylor expanded around -inf 9.0
if -5.577781367361616e+127 < re < -4.7290934126280475e-264Initial program 20.5
rmApplied add-cube-cbrt20.8
Applied sqrt-prod20.8
Simplified20.8
if -4.7290934126280475e-264 < re < 1.2766285812733717e-281Initial program 30.9
Taylor expanded around 0 33.5
if 1.2766285812733717e-281 < re < 1.5729919746509674e+106Initial program 39.3
rmApplied flip--39.0
Applied associate-*r/39.0
Applied sqrt-div39.2
Simplified30.6
rmApplied *-un-lft-identity30.6
Applied sqrt-prod30.6
Applied sqrt-prod30.6
Applied times-frac30.6
Simplified30.6
Simplified20.7
rmApplied *-un-lft-identity20.7
Applied sqrt-prod20.7
Applied add-sqr-sqrt20.7
Applied times-frac20.7
Applied associate-*r*20.7
Simplified20.7
if 1.5729919746509674e+106 < re Initial program 61.7
rmApplied flip--61.7
Applied associate-*r/61.7
Applied sqrt-div61.7
Simplified43.9
rmApplied *-un-lft-identity43.9
Applied sqrt-prod43.9
Applied sqrt-prod44.0
Applied times-frac44.0
Simplified44.0
Simplified41.7
Taylor expanded around inf 9.2
Final simplification17.8
herbie shell --seed 2020046
(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)))))