\left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right) - re\right)\right)}\right)\begin{array}{l}
\mathbf{if}\;re \le 1.57421875:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{\left(re + \sqrt{im \cdot im + re \cdot re}\right) \cdot \left(im \cdot im\right)}{\left(\sqrt{re \cdot re + im \cdot im} + re\right) \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}}\\
\end{array}double f(double re, double im) {
double r1066663 = 0.5;
double r1066664 = /* ERROR: no posit support in C */;
double r1066665 = 2.0;
double r1066666 = /* ERROR: no posit support in C */;
double r1066667 = re;
double r1066668 = r1066667 * r1066667;
double r1066669 = im;
double r1066670 = r1066669 * r1066669;
double r1066671 = r1066668 + r1066670;
double r1066672 = sqrt(r1066671);
double r1066673 = r1066672 - r1066667;
double r1066674 = r1066666 * r1066673;
double r1066675 = sqrt(r1066674);
double r1066676 = r1066664 * r1066675;
return r1066676;
}
double f(double re, double im) {
double r1066677 = re;
double r1066678 = 1.57421875;
bool r1066679 = r1066677 <= r1066678;
double r1066680 = 0.5;
double r1066681 = 2.0;
double r1066682 = r1066677 * r1066677;
double r1066683 = im;
double r1066684 = r1066683 * r1066683;
double r1066685 = r1066682 + r1066684;
double r1066686 = sqrt(r1066685);
double r1066687 = r1066686 - r1066677;
double r1066688 = r1066681 * r1066687;
double r1066689 = sqrt(r1066688);
double r1066690 = r1066680 * r1066689;
double r1066691 = r1066684 + r1066682;
double r1066692 = sqrt(r1066691);
double r1066693 = r1066677 + r1066692;
double r1066694 = r1066693 * r1066684;
double r1066695 = r1066686 + r1066677;
double r1066696 = r1066695 * r1066695;
double r1066697 = r1066694 / r1066696;
double r1066698 = r1066681 * r1066697;
double r1066699 = sqrt(r1066698);
double r1066700 = r1066680 * r1066699;
double r1066701 = r1066679 ? r1066690 : r1066700;
return r1066701;
}



Bits error versus re



Bits error versus im
if re < 1.57421875Initial program 0.9
if 1.57421875 < re Initial program 6.2
rmApplied p16-flip--5.5
rmApplied difference-of-squares6.3
rmApplied p16-flip--5.5
Applied associate-*r/6.0
Applied associate-/l/6.0
Simplified2.1
Final simplification1.2
herbie shell --seed 2019112 +o rules:numerics
(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)))))