0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -8.1561596166685901 \cdot 10^{125}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{-1 \cdot re - re}}\\
\mathbf{elif}\;re \le -1.10443298905324865 \cdot 10^{-116}:\\
\;\;\;\;0.5 \cdot \left(\left(\sqrt{2} \cdot \left|im\right|\right) \cdot \frac{1}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right)\\
\mathbf{elif}\;re \le 2.2168231547144052 \cdot 10^{-295}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{im - re}}\\
\mathbf{elif}\;re \le 2.3062092194117723 \cdot 10^{-254}:\\
\;\;\;\;0.5 \cdot \frac{\frac{\sqrt{2}}{\frac{\left|\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}\right|}{\left|im\right|}}}{\sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} - re}}}\\
\mathbf{elif}\;re \le 6.78638117437622715 \cdot 10^{-92}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\
\end{array}double f(double re, double im) {
double r336995 = 0.5;
double r336996 = 2.0;
double r336997 = re;
double r336998 = r336997 * r336997;
double r336999 = im;
double r337000 = r336999 * r336999;
double r337001 = r336998 + r337000;
double r337002 = sqrt(r337001);
double r337003 = r337002 + r336997;
double r337004 = r336996 * r337003;
double r337005 = sqrt(r337004);
double r337006 = r336995 * r337005;
return r337006;
}
double f(double re, double im) {
double r337007 = re;
double r337008 = -8.15615961666859e+125;
bool r337009 = r337007 <= r337008;
double r337010 = 0.5;
double r337011 = 2.0;
double r337012 = sqrt(r337011);
double r337013 = im;
double r337014 = fabs(r337013);
double r337015 = r337012 * r337014;
double r337016 = -1.0;
double r337017 = r337016 * r337007;
double r337018 = r337017 - r337007;
double r337019 = sqrt(r337018);
double r337020 = r337015 / r337019;
double r337021 = r337010 * r337020;
double r337022 = -1.1044329890532487e-116;
bool r337023 = r337007 <= r337022;
double r337024 = 1.0;
double r337025 = r337007 * r337007;
double r337026 = r337013 * r337013;
double r337027 = r337025 + r337026;
double r337028 = sqrt(r337027);
double r337029 = r337028 - r337007;
double r337030 = sqrt(r337029);
double r337031 = r337024 / r337030;
double r337032 = r337015 * r337031;
double r337033 = r337010 * r337032;
double r337034 = 2.216823154714405e-295;
bool r337035 = r337007 <= r337034;
double r337036 = r337013 - r337007;
double r337037 = sqrt(r337036);
double r337038 = r337015 / r337037;
double r337039 = r337010 * r337038;
double r337040 = 2.3062092194117723e-254;
bool r337041 = r337007 <= r337040;
double r337042 = cbrt(r337029);
double r337043 = fabs(r337042);
double r337044 = r337043 / r337014;
double r337045 = r337012 / r337044;
double r337046 = sqrt(r337042);
double r337047 = r337045 / r337046;
double r337048 = r337010 * r337047;
double r337049 = 6.786381174376227e-92;
bool r337050 = r337007 <= r337049;
double r337051 = r337007 + r337013;
double r337052 = r337011 * r337051;
double r337053 = sqrt(r337052);
double r337054 = r337010 * r337053;
double r337055 = 2.0;
double r337056 = r337055 * r337007;
double r337057 = r337011 * r337056;
double r337058 = sqrt(r337057);
double r337059 = r337010 * r337058;
double r337060 = r337050 ? r337054 : r337059;
double r337061 = r337041 ? r337048 : r337060;
double r337062 = r337035 ? r337039 : r337061;
double r337063 = r337023 ? r337033 : r337062;
double r337064 = r337009 ? r337021 : r337063;
return r337064;
}




Bits error versus re




Bits error versus im
Results
| Original | 38.4 |
|---|---|
| Target | 33.2 |
| Herbie | 22.3 |
if re < -8.15615961666859e+125Initial program 61.9
rmApplied flip-+61.9
Simplified46.9
rmApplied associate-*r/46.9
Applied sqrt-div45.7
rmApplied sqrt-prod45.7
Simplified43.9
Taylor expanded around -inf 9.3
if -8.15615961666859e+125 < re < -1.1044329890532487e-116Initial program 45.6
rmApplied flip-+45.6
Simplified30.8
rmApplied associate-*r/30.8
Applied sqrt-div29.2
rmApplied sqrt-prod29.2
Simplified16.2
rmApplied div-inv16.2
if -1.1044329890532487e-116 < re < 2.216823154714405e-295Initial program 33.1
rmApplied flip-+32.6
Simplified32.2
rmApplied associate-*r/32.2
Applied sqrt-div32.4
rmApplied sqrt-prod32.4
Simplified27.5
Taylor expanded around 0 34.5
if 2.216823154714405e-295 < re < 2.3062092194117723e-254Initial program 29.0
rmApplied flip-+29.9
Simplified29.9
rmApplied associate-*r/29.9
Applied sqrt-div30.7
rmApplied sqrt-prod30.7
Simplified30.3
rmApplied add-cube-cbrt30.5
Applied sqrt-prod30.6
Applied associate-/r*30.6
Simplified30.6
if 2.3062092194117723e-254 < re < 6.786381174376227e-92Initial program 23.5
Taylor expanded around 0 36.6
if 6.786381174376227e-92 < re Initial program 33.4
rmApplied flip-+55.8
Simplified55.4
Taylor expanded around 0 18.7
Final simplification22.3
herbie shell --seed 2020100
(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)))))