0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -7.09301478160325637202272415074052789653 \cdot 10^{-148}:\\
\;\;\;\;0.5 \cdot {\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}\\
\mathbf{elif}\;im \le 3.42856224347509225387704726588764447776 \cdot 10^{-290}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 3.608790805799539988607503878238355677885 \cdot 10^{-252}:\\
\;\;\;\;0.5 \cdot e^{\frac{1}{2} \cdot \left(\log \left(\frac{1}{re}\right) + \log 1\right) + \log im}\\
\mathbf{elif}\;im \le 6.756937579891572770717908490390021157595 \cdot 10^{-175}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 1.612479874751917700729470905308994409174 \cdot 10^{-118}:\\
\;\;\;\;0.5 \cdot e^{\frac{1}{2} \cdot \left(\log \left(\frac{1}{re}\right) + \log 1\right) + \log im}\\
\mathbf{elif}\;im \le 5.383487462092644209013903086477279596812 \cdot 10^{-70}:\\
\;\;\;\;0.5 \cdot {\left(2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)\right)}^{\frac{1}{2}}\\
\mathbf{elif}\;im \le 1.670327607339557761275942305128351768159 \cdot 10^{-44}:\\
\;\;\;\;0.5 \cdot {\left(2 \cdot \frac{im \cdot im + 0}{\sqrt{re \cdot re + im \cdot im} + re}\right)}^{\frac{1}{2}}\\
\mathbf{elif}\;im \le 2.676644915706313570326639258989409597689 \cdot 10^{-6}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r16545 = 0.5;
double r16546 = 2.0;
double r16547 = re;
double r16548 = r16547 * r16547;
double r16549 = im;
double r16550 = r16549 * r16549;
double r16551 = r16548 + r16550;
double r16552 = sqrt(r16551);
double r16553 = r16552 - r16547;
double r16554 = r16546 * r16553;
double r16555 = sqrt(r16554);
double r16556 = r16545 * r16555;
return r16556;
}
double f(double re, double im) {
double r16557 = im;
double r16558 = -7.093014781603256e-148;
bool r16559 = r16557 <= r16558;
double r16560 = 0.5;
double r16561 = 2.0;
double r16562 = re;
double r16563 = r16562 * r16562;
double r16564 = r16557 * r16557;
double r16565 = r16563 + r16564;
double r16566 = sqrt(r16565);
double r16567 = r16566 - r16562;
double r16568 = r16561 * r16567;
double r16569 = 0.5;
double r16570 = pow(r16568, r16569);
double r16571 = r16560 * r16570;
double r16572 = 3.428562243475092e-290;
bool r16573 = r16557 <= r16572;
double r16574 = -2.0;
double r16575 = r16574 * r16562;
double r16576 = r16561 * r16575;
double r16577 = sqrt(r16576);
double r16578 = r16560 * r16577;
double r16579 = 3.60879080579954e-252;
bool r16580 = r16557 <= r16579;
double r16581 = 1.0;
double r16582 = r16581 / r16562;
double r16583 = log(r16582);
double r16584 = 1.0;
double r16585 = log(r16584);
double r16586 = r16583 + r16585;
double r16587 = r16569 * r16586;
double r16588 = log(r16557);
double r16589 = r16587 + r16588;
double r16590 = exp(r16589);
double r16591 = r16560 * r16590;
double r16592 = 6.756937579891573e-175;
bool r16593 = r16557 <= r16592;
double r16594 = 1.6124798747519177e-118;
bool r16595 = r16557 <= r16594;
double r16596 = 5.383487462092644e-70;
bool r16597 = r16557 <= r16596;
double r16598 = 1.6703276073395578e-44;
bool r16599 = r16557 <= r16598;
double r16600 = 0.0;
double r16601 = r16564 + r16600;
double r16602 = r16566 + r16562;
double r16603 = r16601 / r16602;
double r16604 = r16561 * r16603;
double r16605 = pow(r16604, r16569);
double r16606 = r16560 * r16605;
double r16607 = 2.6766449157063136e-06;
bool r16608 = r16557 <= r16607;
double r16609 = r16557 - r16562;
double r16610 = r16561 * r16609;
double r16611 = sqrt(r16610);
double r16612 = r16560 * r16611;
double r16613 = r16608 ? r16578 : r16612;
double r16614 = r16599 ? r16606 : r16613;
double r16615 = r16597 ? r16571 : r16614;
double r16616 = r16595 ? r16591 : r16615;
double r16617 = r16593 ? r16578 : r16616;
double r16618 = r16580 ? r16591 : r16617;
double r16619 = r16573 ? r16578 : r16618;
double r16620 = r16559 ? r16571 : r16619;
return r16620;
}



Bits error versus re



Bits error versus im
Results
if im < -7.093014781603256e-148 or 1.6124798747519177e-118 < im < 5.383487462092644e-70Initial program 36.6
rmApplied pow1/236.6
if -7.093014781603256e-148 < im < 3.428562243475092e-290 or 3.60879080579954e-252 < im < 6.756937579891573e-175 or 1.6703276073395578e-44 < im < 2.6766449157063136e-06Initial program 40.7
Taylor expanded around -inf 36.7
if 3.428562243475092e-290 < im < 3.60879080579954e-252 or 6.756937579891573e-175 < im < 1.6124798747519177e-118Initial program 37.7
rmApplied pow1/237.7
Taylor expanded around inf 38.6
Simplified38.6
if 5.383487462092644e-70 < im < 1.6703276073395578e-44Initial program 27.4
rmApplied pow1/227.4
rmApplied flip--40.0
Simplified28.6
if 2.6766449157063136e-06 < im Initial program 41.7
Taylor expanded around 0 14.8
Final simplification31.0
herbie shell --seed 2019347
(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)))))