double f(double re, double im) {
double r427506 = 0.5;
double r427507 = 2.0;
double r427508 = re;
double r427509 = r427508 * r427508;
double r427510 = im;
double r427511 = r427510 * r427510;
double r427512 = r427509 + r427511;
double r427513 = sqrt(r427512);
double r427514 = r427513 - r427508;
double r427515 = r427507 * r427514;
double r427516 = sqrt(r427515);
double r427517 = r427506 * r427516;
return r427517;
}
double f(double re, double im) {
double r427518 = re;
double r427519 = im;
double r427520 = hypot(r427518, r427519);
double r427521 = r427520 - r427518;
double r427522 = 2.0;
double r427523 = r427521 * r427522;
double r427524 = sqrt(r427523);
double r427525 = 0.5;
double r427526 = r427524 * r427525;
return r427526;
}
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\sqrt{\left(\sqrt{re^2 + im^2}^* - re\right) \cdot 2.0} \cdot 0.5


Bits error versus re



Bits error versus im
Initial program 37.3
Simplified13.0
Final simplification13.0
herbie shell --seed 2019102 +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)))))