0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -3.050261451950869383577954983697308069583 \cdot 10^{-204}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} - re}}\\
\mathbf{elif}\;re \le 5.805113327902052729711003049635275164279 \cdot 10^{-173}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\
\mathbf{elif}\;re \le 4.779501075464754882569321337942348923064 \cdot 10^{124}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}}}\right) \cdot \sqrt{\sqrt{\sqrt[3]{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 r240326 = 0.5;
double r240327 = 2.0;
double r240328 = re;
double r240329 = r240328 * r240328;
double r240330 = im;
double r240331 = r240330 * r240330;
double r240332 = r240329 + r240331;
double r240333 = sqrt(r240332);
double r240334 = r240333 + r240328;
double r240335 = r240327 * r240334;
double r240336 = sqrt(r240335);
double r240337 = r240326 * r240336;
return r240337;
}
double f(double re, double im) {
double r240338 = re;
double r240339 = -3.0502614519508694e-204;
bool r240340 = r240338 <= r240339;
double r240341 = 0.5;
double r240342 = 2.0;
double r240343 = im;
double r240344 = 2.0;
double r240345 = pow(r240343, r240344);
double r240346 = r240338 * r240338;
double r240347 = r240343 * r240343;
double r240348 = r240346 + r240347;
double r240349 = sqrt(r240348);
double r240350 = r240349 - r240338;
double r240351 = r240345 / r240350;
double r240352 = r240342 * r240351;
double r240353 = sqrt(r240352);
double r240354 = r240341 * r240353;
double r240355 = 5.805113327902053e-173;
bool r240356 = r240338 <= r240355;
double r240357 = r240343 + r240338;
double r240358 = r240342 * r240357;
double r240359 = sqrt(r240358);
double r240360 = r240341 * r240359;
double r240361 = 4.779501075464755e+124;
bool r240362 = r240338 <= r240361;
double r240363 = sqrt(r240349);
double r240364 = cbrt(r240348);
double r240365 = r240364 * r240364;
double r240366 = sqrt(r240365);
double r240367 = sqrt(r240366);
double r240368 = r240363 * r240367;
double r240369 = sqrt(r240364);
double r240370 = sqrt(r240369);
double r240371 = r240368 * r240370;
double r240372 = r240371 + r240338;
double r240373 = r240342 * r240372;
double r240374 = sqrt(r240373);
double r240375 = r240341 * r240374;
double r240376 = r240344 * r240338;
double r240377 = r240342 * r240376;
double r240378 = sqrt(r240377);
double r240379 = r240341 * r240378;
double r240380 = r240362 ? r240375 : r240379;
double r240381 = r240356 ? r240360 : r240380;
double r240382 = r240340 ? r240354 : r240381;
return r240382;
}




Bits error versus re




Bits error versus im
Results
| Original | 39.1 |
|---|---|
| Target | 34.3 |
| Herbie | 27.9 |
if re < -3.0502614519508694e-204Initial program 49.2
rmApplied flip-+49.2
Simplified37.9
if -3.0502614519508694e-204 < re < 5.805113327902053e-173Initial program 30.6
Taylor expanded around 0 34.1
if 5.805113327902053e-173 < re < 4.779501075464755e+124Initial program 16.8
rmApplied add-sqr-sqrt16.8
Applied sqrt-prod16.9
rmApplied add-cube-cbrt17.0
Applied sqrt-prod17.0
Applied sqrt-prod17.0
Applied associate-*r*17.0
if 4.779501075464755e+124 < re Initial program 57.1
Taylor expanded around inf 8.6
Final simplification27.9
herbie shell --seed 2019297
(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)))))