0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -7.501313924387043 \cdot 10^{-149}:\\
\;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\
\mathbf{elif}\;re \le 1.2475268769655207 \cdot 10^{-225}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\
\mathbf{elif}\;re \le 5.314683131961287 \cdot 10^{+99}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left(\sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}}\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\left(re + re\right) \cdot 2.0} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r5349806 = 0.5;
double r5349807 = 2.0;
double r5349808 = re;
double r5349809 = r5349808 * r5349808;
double r5349810 = im;
double r5349811 = r5349810 * r5349810;
double r5349812 = r5349809 + r5349811;
double r5349813 = sqrt(r5349812);
double r5349814 = r5349813 + r5349808;
double r5349815 = r5349807 * r5349814;
double r5349816 = sqrt(r5349815);
double r5349817 = r5349806 * r5349816;
return r5349817;
}
double f(double re, double im) {
double r5349818 = re;
double r5349819 = -7.501313924387043e-149;
bool r5349820 = r5349818 <= r5349819;
double r5349821 = 2.0;
double r5349822 = im;
double r5349823 = r5349822 * r5349822;
double r5349824 = r5349818 * r5349818;
double r5349825 = r5349823 + r5349824;
double r5349826 = sqrt(r5349825);
double r5349827 = r5349826 - r5349818;
double r5349828 = r5349823 / r5349827;
double r5349829 = r5349821 * r5349828;
double r5349830 = sqrt(r5349829);
double r5349831 = 0.5;
double r5349832 = r5349830 * r5349831;
double r5349833 = 1.2475268769655207e-225;
bool r5349834 = r5349818 <= r5349833;
double r5349835 = r5349822 + r5349818;
double r5349836 = r5349821 * r5349835;
double r5349837 = sqrt(r5349836);
double r5349838 = r5349837 * r5349831;
double r5349839 = 5.314683131961287e+99;
bool r5349840 = r5349818 <= r5349839;
double r5349841 = cbrt(r5349825);
double r5349842 = r5349841 * r5349841;
double r5349843 = sqrt(r5349842);
double r5349844 = sqrt(r5349843);
double r5349845 = sqrt(r5349841);
double r5349846 = sqrt(r5349845);
double r5349847 = sqrt(r5349826);
double r5349848 = r5349846 * r5349847;
double r5349849 = r5349844 * r5349848;
double r5349850 = r5349818 + r5349849;
double r5349851 = r5349821 * r5349850;
double r5349852 = sqrt(r5349851);
double r5349853 = r5349831 * r5349852;
double r5349854 = r5349818 + r5349818;
double r5349855 = r5349854 * r5349821;
double r5349856 = sqrt(r5349855);
double r5349857 = r5349856 * r5349831;
double r5349858 = r5349840 ? r5349853 : r5349857;
double r5349859 = r5349834 ? r5349838 : r5349858;
double r5349860 = r5349820 ? r5349832 : r5349859;
return r5349860;
}




Bits error versus re




Bits error versus im
Results
| Original | 37.5 |
|---|---|
| Target | 32.6 |
| Herbie | 27.1 |
if re < -7.501313924387043e-149Initial program 51.4
rmApplied add-sqr-sqrt52.1
rmApplied flip-+52.1
Simplified37.7
Simplified37.6
if -7.501313924387043e-149 < re < 1.2475268769655207e-225Initial program 30.0
Taylor expanded around 0 35.1
if 1.2475268769655207e-225 < re < 5.314683131961287e+99Initial program 17.5
rmApplied add-sqr-sqrt17.6
rmApplied add-cube-cbrt17.7
Applied sqrt-prod17.7
Applied sqrt-prod17.7
Applied associate-*l*17.7
if 5.314683131961287e+99 < re Initial program 49.5
rmApplied add-sqr-sqrt49.5
Taylor expanded around inf 10.2
Simplified10.2
Final simplification27.1
herbie shell --seed 2019130
(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)))))