0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.3657760091869803 \cdot 10^{154}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{\left(-re\right) - re}\right)}\\
\mathbf{elif}\;re \le -4.5405452937718227 \cdot 10^{-275}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {\left(\left|im\right|\right)}^{2}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\
\mathbf{elif}\;re \le 1.27662858127337166 \cdot 10^{-281}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{im - re}\right)}\\
\mathbf{elif}\;re \le 1.5366724406791122 \cdot 10^{106}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot 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 r192841 = 0.5;
double r192842 = 2.0;
double r192843 = re;
double r192844 = r192843 * r192843;
double r192845 = im;
double r192846 = r192845 * r192845;
double r192847 = r192844 + r192846;
double r192848 = sqrt(r192847);
double r192849 = r192848 + r192843;
double r192850 = r192842 * r192849;
double r192851 = sqrt(r192850);
double r192852 = r192841 * r192851;
return r192852;
}
double f(double re, double im) {
double r192853 = re;
double r192854 = -1.3657760091869803e+154;
bool r192855 = r192853 <= r192854;
double r192856 = 0.5;
double r192857 = 2.0;
double r192858 = im;
double r192859 = fabs(r192858);
double r192860 = -r192853;
double r192861 = r192860 - r192853;
double r192862 = r192859 / r192861;
double r192863 = r192859 * r192862;
double r192864 = r192857 * r192863;
double r192865 = sqrt(r192864);
double r192866 = r192856 * r192865;
double r192867 = -4.540545293771823e-275;
bool r192868 = r192853 <= r192867;
double r192869 = 2.0;
double r192870 = pow(r192859, r192869);
double r192871 = r192857 * r192870;
double r192872 = sqrt(r192871);
double r192873 = r192853 * r192853;
double r192874 = r192858 * r192858;
double r192875 = r192873 + r192874;
double r192876 = sqrt(r192875);
double r192877 = r192876 - r192853;
double r192878 = sqrt(r192877);
double r192879 = r192872 / r192878;
double r192880 = r192856 * r192879;
double r192881 = 1.2766285812733717e-281;
bool r192882 = r192853 <= r192881;
double r192883 = r192858 - r192853;
double r192884 = r192859 / r192883;
double r192885 = r192859 * r192884;
double r192886 = r192857 * r192885;
double r192887 = sqrt(r192886);
double r192888 = r192856 * r192887;
double r192889 = 1.5366724406791122e+106;
bool r192890 = r192853 <= r192889;
double r192891 = sqrt(r192876);
double r192892 = r192891 * r192891;
double r192893 = r192892 + r192853;
double r192894 = r192857 * r192893;
double r192895 = sqrt(r192894);
double r192896 = r192856 * r192895;
double r192897 = r192869 * r192853;
double r192898 = r192857 * r192897;
double r192899 = sqrt(r192898);
double r192900 = r192856 * r192899;
double r192901 = r192890 ? r192896 : r192900;
double r192902 = r192882 ? r192888 : r192901;
double r192903 = r192868 ? r192880 : r192902;
double r192904 = r192855 ? r192866 : r192903;
return r192904;
}




Bits error versus re




Bits error versus im
Results
| Original | 39.1 |
|---|---|
| Target | 34.1 |
| Herbie | 22.9 |
if re < -1.3657760091869803e+154Initial program 64.0
rmApplied add-sqr-sqrt64.0
Applied sqrt-prod64.0
rmApplied flip-+64.0
Simplified50.6
Simplified50.6
rmApplied *-un-lft-identity50.6
Applied add-sqr-sqrt50.6
Applied times-frac50.6
Simplified50.6
Simplified50.2
Taylor expanded around -inf 22.8
Simplified22.8
if -1.3657760091869803e+154 < re < -4.540545293771823e-275Initial program 41.2
rmApplied add-sqr-sqrt41.2
Applied sqrt-prod42.1
rmApplied flip-+41.9
Simplified31.4
Simplified31.4
rmApplied *-un-lft-identity31.4
Applied add-sqr-sqrt31.4
Applied times-frac31.3
Simplified31.3
Simplified29.2
rmApplied associate-*r/31.4
Applied associate-*r/31.4
Applied sqrt-div30.0
Simplified30.0
if -4.540545293771823e-275 < re < 1.2766285812733717e-281Initial program 32.3
rmApplied add-sqr-sqrt32.3
Applied sqrt-prod32.4
rmApplied flip-+32.5
Simplified32.5
Simplified32.4
rmApplied *-un-lft-identity32.4
Applied add-sqr-sqrt32.4
Applied times-frac32.4
Simplified32.0
Simplified31.8
Taylor expanded around 0 33.4
if 1.2766285812733717e-281 < re < 1.5366724406791122e+106Initial program 20.7
rmApplied add-sqr-sqrt20.7
Applied sqrt-prod20.8
if 1.5366724406791122e+106 < re Initial program 52.7
rmApplied add-sqr-sqrt52.7
Applied sqrt-prod52.7
rmApplied flip-+62.2
Simplified62.4
Simplified62.6
Taylor expanded around 0 8.9
Final simplification22.9
herbie shell --seed 2020046
(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)))))