0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -6.773854852154095 \cdot 10^{+130}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\
\mathbf{elif}\;re \le -1.7939481438531874 \cdot 10^{-236}:\\
\;\;\;\;\left(\sqrt{2.0} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 0.5\\
\mathbf{elif}\;re \le 2.7193766495029553 \cdot 10^{+99}:\\
\;\;\;\;\sqrt{\left(\sqrt{im \cdot im + re \cdot re} + re\right) \cdot 2.0} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\left(re + re\right) \cdot 2.0} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r6540794 = 0.5;
double r6540795 = 2.0;
double r6540796 = re;
double r6540797 = r6540796 * r6540796;
double r6540798 = im;
double r6540799 = r6540798 * r6540798;
double r6540800 = r6540797 + r6540799;
double r6540801 = sqrt(r6540800);
double r6540802 = r6540801 + r6540796;
double r6540803 = r6540795 * r6540802;
double r6540804 = sqrt(r6540803);
double r6540805 = r6540794 * r6540804;
return r6540805;
}
double f(double re, double im) {
double r6540806 = re;
double r6540807 = -6.773854852154095e+130;
bool r6540808 = r6540806 <= r6540807;
double r6540809 = im;
double r6540810 = r6540809 * r6540809;
double r6540811 = 2.0;
double r6540812 = r6540810 * r6540811;
double r6540813 = sqrt(r6540812);
double r6540814 = -2.0;
double r6540815 = r6540814 * r6540806;
double r6540816 = sqrt(r6540815);
double r6540817 = r6540813 / r6540816;
double r6540818 = 0.5;
double r6540819 = r6540817 * r6540818;
double r6540820 = -1.7939481438531874e-236;
bool r6540821 = r6540806 <= r6540820;
double r6540822 = sqrt(r6540811);
double r6540823 = fabs(r6540809);
double r6540824 = r6540806 * r6540806;
double r6540825 = r6540810 + r6540824;
double r6540826 = sqrt(r6540825);
double r6540827 = r6540826 - r6540806;
double r6540828 = sqrt(r6540827);
double r6540829 = r6540823 / r6540828;
double r6540830 = r6540822 * r6540829;
double r6540831 = r6540830 * r6540818;
double r6540832 = 2.7193766495029553e+99;
bool r6540833 = r6540806 <= r6540832;
double r6540834 = r6540826 + r6540806;
double r6540835 = r6540834 * r6540811;
double r6540836 = sqrt(r6540835);
double r6540837 = r6540836 * r6540818;
double r6540838 = r6540806 + r6540806;
double r6540839 = r6540838 * r6540811;
double r6540840 = sqrt(r6540839);
double r6540841 = r6540840 * r6540818;
double r6540842 = r6540833 ? r6540837 : r6540841;
double r6540843 = r6540821 ? r6540831 : r6540842;
double r6540844 = r6540808 ? r6540819 : r6540843;
return r6540844;
}




Bits error versus re




Bits error versus im
Results
| Original | 37.5 |
|---|---|
| Target | 32.7 |
| Herbie | 18.3 |
if re < -6.773854852154095e+130Initial program 61.1
rmApplied flip-+61.1
Simplified47.4
rmApplied associate-*r/47.4
Applied sqrt-div46.3
Simplified46.3
Taylor expanded around -inf 18.5
if -6.773854852154095e+130 < re < -1.7939481438531874e-236Initial program 39.8
rmApplied flip-+39.7
Simplified30.1
rmApplied associate-*r/30.1
Applied sqrt-div29.2
Simplified29.2
rmApplied *-un-lft-identity29.2
Applied sqrt-prod29.2
Applied times-frac29.2
Simplified29.2
rmApplied rem-sqrt-square18.1
if -1.7939481438531874e-236 < re < 2.7193766495029553e+99Initial program 22.1
if 2.7193766495029553e+99 < re Initial program 49.2
Taylor expanded around inf 10.0
Final simplification18.3
herbie shell --seed 2019139
(FPCore (re im)
:name "math.sqrt on complex, real part"
:herbie-target
(if (< re 0) (* 0.5 (* (sqrt 2) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))
(* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))