0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}0.5 \cdot \sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2}double f(double re, double im) {
double r27459 = 0.5;
double r27460 = 2.0;
double r27461 = re;
double r27462 = r27461 * r27461;
double r27463 = im;
double r27464 = r27463 * r27463;
double r27465 = r27462 + r27464;
double r27466 = sqrt(r27465);
double r27467 = r27466 - r27461;
double r27468 = r27460 * r27467;
double r27469 = sqrt(r27468);
double r27470 = r27459 * r27469;
return r27470;
}
double f(double re, double im) {
double r27471 = 0.5;
double r27472 = re;
double r27473 = im;
double r27474 = hypot(r27472, r27473);
double r27475 = r27474 - r27472;
double r27476 = 2.0;
double r27477 = r27475 * r27476;
double r27478 = sqrt(r27477);
double r27479 = r27471 * r27478;
return r27479;
}



Bits error versus re



Bits error versus im
Results
Initial program 38.1
Simplified13.1
Final simplification13.1
herbie shell --seed 2019303 +o rules:numerics
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
:precision binary64
(* 0.5 (sqrt (* 2 (- (sqrt (+ (* re re) (* im im))) re)))))