0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -3.14091568832087229374045001906567508277 \cdot 10^{189}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{-2 \cdot re}}\\
\mathbf{elif}\;re \le -1.488749840237467467046649993736781737408 \cdot 10^{-304}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im \cdot \frac{im}{\sqrt{re \cdot re + im \cdot im} - re}\right)}\\
\mathbf{elif}\;re \le 8.200231256875077595325692973571730595543 \cdot 10^{-281}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\
\mathbf{elif}\;re \le 1.285382656044220860536640397267855783932 \cdot 10^{67}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot {e}^{\left(\log \left(\sqrt{re \cdot re + im \cdot im} + re\right)\right)}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\
\end{array}double f(double re, double im) {
double r318119 = 0.5;
double r318120 = 2.0;
double r318121 = re;
double r318122 = r318121 * r318121;
double r318123 = im;
double r318124 = r318123 * r318123;
double r318125 = r318122 + r318124;
double r318126 = sqrt(r318125);
double r318127 = r318126 + r318121;
double r318128 = r318120 * r318127;
double r318129 = sqrt(r318128);
double r318130 = r318119 * r318129;
return r318130;
}
double f(double re, double im) {
double r318131 = re;
double r318132 = -3.1409156883208723e+189;
bool r318133 = r318131 <= r318132;
double r318134 = 0.5;
double r318135 = 2.0;
double r318136 = im;
double r318137 = r318136 * r318136;
double r318138 = -2.0;
double r318139 = r318138 * r318131;
double r318140 = r318137 / r318139;
double r318141 = r318135 * r318140;
double r318142 = sqrt(r318141);
double r318143 = r318134 * r318142;
double r318144 = -1.4887498402374675e-304;
bool r318145 = r318131 <= r318144;
double r318146 = r318131 * r318131;
double r318147 = r318146 + r318137;
double r318148 = sqrt(r318147);
double r318149 = r318148 - r318131;
double r318150 = r318136 / r318149;
double r318151 = r318136 * r318150;
double r318152 = r318135 * r318151;
double r318153 = sqrt(r318152);
double r318154 = r318134 * r318153;
double r318155 = 8.200231256875078e-281;
bool r318156 = r318131 <= r318155;
double r318157 = r318131 + r318136;
double r318158 = r318135 * r318157;
double r318159 = sqrt(r318158);
double r318160 = r318134 * r318159;
double r318161 = 1.2853826560442209e+67;
bool r318162 = r318131 <= r318161;
double r318163 = exp(1.0);
double r318164 = r318148 + r318131;
double r318165 = log(r318164);
double r318166 = pow(r318163, r318165);
double r318167 = r318135 * r318166;
double r318168 = sqrt(r318167);
double r318169 = r318134 * r318168;
double r318170 = 2.0;
double r318171 = r318170 * r318131;
double r318172 = r318135 * r318171;
double r318173 = sqrt(r318172);
double r318174 = r318134 * r318173;
double r318175 = r318162 ? r318169 : r318174;
double r318176 = r318156 ? r318160 : r318175;
double r318177 = r318145 ? r318154 : r318176;
double r318178 = r318133 ? r318143 : r318177;
return r318178;
}




Bits error versus re




Bits error versus im
Results
| Original | 38.3 |
|---|---|
| Target | 33.3 |
| Herbie | 24.8 |
if re < -3.1409156883208723e+189Initial program 64.0
rmApplied flip-+64.0
Simplified50.1
Taylor expanded around -inf 30.9
if -3.1409156883208723e+189 < re < -1.4887498402374675e-304Initial program 41.4
rmApplied flip-+41.2
Simplified32.0
rmApplied *-un-lft-identity32.0
Applied times-frac30.1
Simplified30.1
if -1.4887498402374675e-304 < re < 8.200231256875078e-281Initial program 28.6
Taylor expanded around 0 34.7
if 8.200231256875078e-281 < re < 1.2853826560442209e+67Initial program 21.2
rmApplied add-exp-log23.5
rmApplied pow123.5
Applied log-pow23.5
Applied exp-prod23.8
Simplified23.8
if 1.2853826560442209e+67 < re Initial program 45.0
Taylor expanded around inf 11.3
Final simplification24.8
herbie shell --seed 2019352
(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)))))