Average Error: 2.1 → 1.2
Time: 19.5s
Precision: 64
\[\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}\]
\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;
}

Error

Bits error versus re

Bits error versus im

Derivation

  1. Split input into 2 regimes
  2. if re < 1.57421875

    1. Initial program 0.9

      \[\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)\]

    if 1.57421875 < re

    1. Initial program 6.2

      \[\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)\]
    2. Using strategy rm
    3. Applied p16-flip--5.5

      \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \color{blue}{\left(\frac{\left(\left(\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right) \cdot \left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)\right) - \left(re \cdot re\right)\right)}{\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right)}\right)}\right)}\right)\]
    4. Using strategy rm
    5. Applied difference-of-squares6.3

      \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\frac{\color{blue}{\left(\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right) \cdot \left(\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right) - re\right)\right)}}{\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right)}\right)\right)}\right)\]
    6. Using strategy rm
    7. Applied p16-flip--5.5

      \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\frac{\left(\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right) \cdot \color{blue}{\left(\frac{\left(\left(\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right) \cdot \left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)\right) - \left(re \cdot re\right)\right)}{\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right)}\right)}\right)}{\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right)}\right)\right)}\right)\]
    8. Applied associate-*r/6.0

      \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\frac{\color{blue}{\left(\frac{\left(\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right) \cdot \left(\left(\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right) \cdot \left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)\right) - \left(re \cdot re\right)\right)\right)}{\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right)}\right)}}{\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right)}\right)\right)}\right)\]
    9. Applied associate-/l/6.0

      \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \color{blue}{\left(\frac{\left(\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right) \cdot \left(\left(\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right) \cdot \left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)\right) - \left(re \cdot re\right)\right)\right)}{\left(\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right) \cdot \left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right)\right)}\right)}\right)}\right)\]
    10. Simplified2.1

      \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\frac{\color{blue}{\left(\left(\frac{re}{\left(\sqrt{\left(\frac{\left(im \cdot im\right)}{\left(re \cdot re\right)}\right)}\right)}\right) \cdot \left(im \cdot im\right)\right)}}{\left(\left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right) \cdot \left(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right)\right)}\right)\right)}\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.2

    \[\leadsto \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}\]

Reproduce

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)))))