Average Error: 2.0 → 1.2
Time: 18.9s
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 0.876953125:\\ \;\;\;\;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 0.876953125:\\
\;\;\;\;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 r1101478 = 0.5;
        double r1101479 = /* ERROR: no posit support in C */;
        double r1101480 = 2.0;
        double r1101481 = /* ERROR: no posit support in C */;
        double r1101482 = re;
        double r1101483 = r1101482 * r1101482;
        double r1101484 = im;
        double r1101485 = r1101484 * r1101484;
        double r1101486 = r1101483 + r1101485;
        double r1101487 = sqrt(r1101486);
        double r1101488 = r1101487 - r1101482;
        double r1101489 = r1101481 * r1101488;
        double r1101490 = sqrt(r1101489);
        double r1101491 = r1101479 * r1101490;
        return r1101491;
}

double f(double re, double im) {
        double r1101492 = re;
        double r1101493 = 0.876953125;
        bool r1101494 = r1101492 <= r1101493;
        double r1101495 = 0.5;
        double r1101496 = 2.0;
        double r1101497 = r1101492 * r1101492;
        double r1101498 = im;
        double r1101499 = r1101498 * r1101498;
        double r1101500 = r1101497 + r1101499;
        double r1101501 = sqrt(r1101500);
        double r1101502 = r1101501 - r1101492;
        double r1101503 = r1101496 * r1101502;
        double r1101504 = sqrt(r1101503);
        double r1101505 = r1101495 * r1101504;
        double r1101506 = r1101499 + r1101497;
        double r1101507 = sqrt(r1101506);
        double r1101508 = r1101492 + r1101507;
        double r1101509 = r1101508 * r1101499;
        double r1101510 = r1101501 + r1101492;
        double r1101511 = r1101510 * r1101510;
        double r1101512 = r1101509 / r1101511;
        double r1101513 = r1101496 * r1101512;
        double r1101514 = sqrt(r1101513);
        double r1101515 = r1101495 * r1101514;
        double r1101516 = r1101494 ? r1101505 : r1101515;
        return r1101516;
}

Error

Bits error versus re

Bits error versus im

Derivation

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

    1. Initial program 0.8

      \[\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 0.876953125 < re

    1. Initial program 5.3

      \[\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--4.7

      \[\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-squares5.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--4.7

      \[\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/5.3

      \[\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/5.3

      \[\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 0.876953125:\\ \;\;\;\;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 2019107 +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)))))