double f(double re, double im) {
double r804645 = 0.5;
double r804646 = 2.0;
double r804647 = re;
double r804648 = r804647 * r804647;
double r804649 = im;
double r804650 = r804649 * r804649;
double r804651 = r804648 + r804650;
double r804652 = sqrt(r804651);
double r804653 = r804652 - r804647;
double r804654 = r804646 * r804653;
double r804655 = sqrt(r804654);
double r804656 = r804645 * r804655;
return r804656;
}
double f(double re, double im) {
double r804657 = 0.5;
double r804658 = 2.0;
double r804659 = re;
double r804660 = r804659 * r804659;
double r804661 = im;
double r804662 = r804661 * r804661;
double r804663 = r804660 + r804662;
double r804664 = sqrt(r804663);
double r804665 = r804664 - r804659;
double r804666 = r804658 * r804665;
double r804667 = sqrt(r804666);
double r804668 = r804657 * r804667;
return r804668;
}
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}


Bits error versus re



Bits error versus im
Initial program 2.0
Final simplification2.0
herbie shell --seed 2019101
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
(*.p16 (real->posit16 0.5) (sqrt.p16 (*.p16 (real->posit16 2.0) (-.p16 (sqrt.p16 (+.p16 (*.p16 re re) (*.p16 im im))) re)))))