0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2.0} \cdot 0.5double f(double re, double im) {
double r499817 = 0.5;
double r499818 = 2.0;
double r499819 = re;
double r499820 = r499819 * r499819;
double r499821 = im;
double r499822 = r499821 * r499821;
double r499823 = r499820 + r499822;
double r499824 = sqrt(r499823);
double r499825 = r499824 - r499819;
double r499826 = r499818 * r499825;
double r499827 = sqrt(r499826);
double r499828 = r499817 * r499827;
return r499828;
}
double f(double re, double im) {
double r499829 = re;
double r499830 = im;
double r499831 = hypot(r499829, r499830);
double r499832 = r499831 - r499829;
double r499833 = 2.0;
double r499834 = r499832 * r499833;
double r499835 = sqrt(r499834);
double r499836 = 0.5;
double r499837 = r499835 * r499836;
return r499837;
}



Bits error versus re



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