0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le 1.89138032684673357 \cdot 10^{-289}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{\sqrt{re \cdot re + im \cdot im} - re}}\\
\mathbf{elif}\;re \le 1.7143375768306352 \cdot 10^{-196}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\
\mathbf{elif}\;re \le 6.0409761572375771 \cdot 10^{-106}:\\
\;\;\;\;0.5 \cdot {\left(e^{\sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)} \cdot \sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}}\right)}^{\left(\sqrt[3]{\log \left(\sqrt{2 \cdot \left(e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)} + re\right)}\right)}\right)}\\
\mathbf{elif}\;re \le 2.51281944061659445 \cdot 10^{-83}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\
\end{array}double f(double re, double im) {
double r238702 = 0.5;
double r238703 = 2.0;
double r238704 = re;
double r238705 = r238704 * r238704;
double r238706 = im;
double r238707 = r238706 * r238706;
double r238708 = r238705 + r238707;
double r238709 = sqrt(r238708);
double r238710 = r238709 + r238704;
double r238711 = r238703 * r238710;
double r238712 = sqrt(r238711);
double r238713 = r238702 * r238712;
return r238713;
}
double f(double re, double im) {
double r238714 = re;
double r238715 = 1.8913803268467336e-289;
bool r238716 = r238714 <= r238715;
double r238717 = 0.5;
double r238718 = 2.0;
double r238719 = im;
double r238720 = r238719 * r238719;
double r238721 = r238714 * r238714;
double r238722 = r238721 + r238720;
double r238723 = sqrt(r238722);
double r238724 = r238723 - r238714;
double r238725 = r238720 / r238724;
double r238726 = r238718 * r238725;
double r238727 = sqrt(r238726);
double r238728 = r238717 * r238727;
double r238729 = 1.7143375768306352e-196;
bool r238730 = r238714 <= r238729;
double r238731 = r238719 + r238714;
double r238732 = r238718 * r238731;
double r238733 = sqrt(r238732);
double r238734 = r238717 * r238733;
double r238735 = 6.040976157237577e-106;
bool r238736 = r238714 <= r238735;
double r238737 = log(r238723);
double r238738 = exp(r238737);
double r238739 = r238738 + r238714;
double r238740 = r238718 * r238739;
double r238741 = sqrt(r238740);
double r238742 = log(r238741);
double r238743 = cbrt(r238742);
double r238744 = r238743 * r238743;
double r238745 = exp(r238744);
double r238746 = pow(r238745, r238743);
double r238747 = r238717 * r238746;
double r238748 = 2.5128194406165944e-83;
bool r238749 = r238714 <= r238748;
double r238750 = 2.0;
double r238751 = r238750 * r238714;
double r238752 = r238718 * r238751;
double r238753 = sqrt(r238752);
double r238754 = r238717 * r238753;
double r238755 = r238749 ? r238734 : r238754;
double r238756 = r238736 ? r238747 : r238755;
double r238757 = r238730 ? r238734 : r238756;
double r238758 = r238716 ? r238728 : r238757;
return r238758;
}




Bits error versus re




Bits error versus im
Results
| Original | 38.1 |
|---|---|
| Target | 33.2 |
| Herbie | 28.9 |
if re < 1.8913803268467336e-289Initial program 45.4
rmApplied flip-+45.2
Simplified35.7
if 1.8913803268467336e-289 < re < 1.7143375768306352e-196 or 6.040976157237577e-106 < re < 2.5128194406165944e-83Initial program 28.0
Taylor expanded around 0 34.0
if 1.7143375768306352e-196 < re < 6.040976157237577e-106Initial program 17.6
rmApplied add-exp-log20.3
rmApplied add-exp-log20.5
rmApplied add-cube-cbrt22.2
Applied exp-prod22.2
if 2.5128194406165944e-83 < re Initial program 34.2
Taylor expanded around inf 18.0
Final simplification28.9
herbie shell --seed 2020059
(FPCore (re im)
:name "math.sqrt on complex, real part"
:precision binary64
:herbie-target
(if (< re 0.0) (* 0.5 (* (sqrt 2) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2 (+ (sqrt (+ (* re re) (* im im))) re)))))
(* 0.5 (sqrt (* 2 (+ (sqrt (+ (* re re) (* im im))) re)))))