0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -8789989068572990460:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left|\frac{im}{\sqrt{-2 \cdot re}}\right|\right)\\
\mathbf{elif}\;re \le -2.41337729739384158 \cdot 10^{-231}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left|\frac{im}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\right|\right)\\
\mathbf{elif}\;re \le 1.67371517749345966 \cdot 10^{-296}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\
\mathbf{elif}\;re \le 1.23466046513203641 \cdot 10^{-75}:\\
\;\;\;\;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{elif}\;re \le 1.3202809311828264 \cdot 10^{-48}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\
\mathbf{elif}\;re \le 4.50614919193534633 \cdot 10^{68}:\\
\;\;\;\;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(re + re\right)}\\
\end{array}double f(double re, double im) {
double r308233 = 0.5;
double r308234 = 2.0;
double r308235 = re;
double r308236 = r308235 * r308235;
double r308237 = im;
double r308238 = r308237 * r308237;
double r308239 = r308236 + r308238;
double r308240 = sqrt(r308239);
double r308241 = r308240 + r308235;
double r308242 = r308234 * r308241;
double r308243 = sqrt(r308242);
double r308244 = r308233 * r308243;
return r308244;
}
double f(double re, double im) {
double r308245 = re;
double r308246 = -8.78998906857299e+18;
bool r308247 = r308245 <= r308246;
double r308248 = 0.5;
double r308249 = 2.0;
double r308250 = sqrt(r308249);
double r308251 = im;
double r308252 = -2.0;
double r308253 = r308252 * r308245;
double r308254 = sqrt(r308253);
double r308255 = r308251 / r308254;
double r308256 = fabs(r308255);
double r308257 = r308250 * r308256;
double r308258 = r308248 * r308257;
double r308259 = -2.4133772973938416e-231;
bool r308260 = r308245 <= r308259;
double r308261 = r308245 * r308245;
double r308262 = r308251 * r308251;
double r308263 = r308261 + r308262;
double r308264 = sqrt(r308263);
double r308265 = r308264 - r308245;
double r308266 = sqrt(r308265);
double r308267 = r308251 / r308266;
double r308268 = fabs(r308267);
double r308269 = r308250 * r308268;
double r308270 = r308248 * r308269;
double r308271 = 1.6737151774934597e-296;
bool r308272 = r308245 <= r308271;
double r308273 = r308251 + r308245;
double r308274 = r308249 * r308273;
double r308275 = sqrt(r308274);
double r308276 = r308248 * r308275;
double r308277 = 1.2346604651320364e-75;
bool r308278 = r308245 <= r308277;
double r308279 = sqrt(r308264);
double r308280 = r308279 * r308279;
double r308281 = r308280 + r308245;
double r308282 = r308249 * r308281;
double r308283 = sqrt(r308282);
double r308284 = r308248 * r308283;
double r308285 = 1.3202809311828264e-48;
bool r308286 = r308245 <= r308285;
double r308287 = 4.506149191935346e+68;
bool r308288 = r308245 <= r308287;
double r308289 = r308245 + r308245;
double r308290 = r308249 * r308289;
double r308291 = sqrt(r308290);
double r308292 = r308248 * r308291;
double r308293 = r308288 ? r308284 : r308292;
double r308294 = r308286 ? r308276 : r308293;
double r308295 = r308278 ? r308284 : r308294;
double r308296 = r308272 ? r308276 : r308295;
double r308297 = r308260 ? r308270 : r308296;
double r308298 = r308247 ? r308258 : r308297;
return r308298;
}




Bits error versus re




Bits error versus im
Results
| Original | 39.2 |
|---|---|
| Target | 34.1 |
| Herbie | 18.6 |
if re < -8.78998906857299e+18Initial program 58.9
rmApplied flip-+58.9
Simplified42.7
rmApplied add-sqr-sqrt42.7
Applied add-sqr-sqrt53.5
Applied unpow-prod-down53.5
Applied times-frac53.3
Simplified53.2
Simplified42.3
rmApplied sqrt-prod42.3
Simplified35.8
Taylor expanded around -inf 14.1
if -8.78998906857299e+18 < re < -2.4133772973938416e-231Initial program 36.8
rmApplied flip-+36.6
Simplified30.5
rmApplied add-sqr-sqrt30.6
Applied add-sqr-sqrt48.1
Applied unpow-prod-down48.1
Applied times-frac46.4
Simplified46.4
Simplified27.5
rmApplied sqrt-prod27.6
Simplified18.6
if -2.4133772973938416e-231 < re < 1.6737151774934597e-296 or 1.2346604651320364e-75 < re < 1.3202809311828264e-48Initial program 28.4
Taylor expanded around 0 36.7
if 1.6737151774934597e-296 < re < 1.2346604651320364e-75 or 1.3202809311828264e-48 < re < 4.506149191935346e+68Initial program 20.7
rmApplied add-sqr-sqrt20.7
Applied sqrt-prod20.8
if 4.506149191935346e+68 < re Initial program 48.1
Taylor expanded around inf 12.0
Final simplification18.6
herbie shell --seed 2020036
(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)))))