Average Error: 2.1 → 2.1
Time: 49.7s
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)\]
\[\left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\left(\sqrt{\left(\left(\mathsf{qma}\left(\left(\left(re \cdot re\right)\right), im, im\right)\right)\right)}\right) - re\right)\right)}\right)\]
\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)
\left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\left(\sqrt{\left(\left(\mathsf{qma}\left(\left(\left(re \cdot re\right)\right), im, im\right)\right)\right)}\right) - re\right)\right)}\right)
double f(double re, double im) {
        double r1190888 = 0.5;
        double r1190889 = /* ERROR: no posit support in C */;
        double r1190890 = 2.0;
        double r1190891 = /* ERROR: no posit support in C */;
        double r1190892 = re;
        double r1190893 = r1190892 * r1190892;
        double r1190894 = im;
        double r1190895 = r1190894 * r1190894;
        double r1190896 = r1190893 + r1190895;
        double r1190897 = sqrt(r1190896);
        double r1190898 = r1190897 - r1190892;
        double r1190899 = r1190891 * r1190898;
        double r1190900 = sqrt(r1190899);
        double r1190901 = r1190889 * r1190900;
        return r1190901;
}

double f(double re, double im) {
        double r1190902 = 0.5;
        double r1190903 = /* ERROR: no posit support in C */;
        double r1190904 = 2.0;
        double r1190905 = /* ERROR: no posit support in C */;
        double r1190906 = re;
        double r1190907 = r1190906 * r1190906;
        double r1190908 = /*Error: no posit support in C */;
        double r1190909 = im;
        double r1190910 = /*Error: no posit support in C */;
        double r1190911 = /*Error: no posit support in C */;
        double r1190912 = sqrt(r1190911);
        double r1190913 = r1190912 - r1190906;
        double r1190914 = r1190905 * r1190913;
        double r1190915 = sqrt(r1190914);
        double r1190916 = r1190903 * r1190915;
        return r1190916;
}

Error

Bits error versus re

Bits error versus im

Derivation

  1. Initial program 2.1

    \[\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 introduce-quire2.1

    \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\left(\sqrt{\left(\frac{\color{blue}{\left(\left(\left(re \cdot re\right)\right)\right)}}{\left(im \cdot im\right)}\right)}\right) - re\right)\right)}\right)\]
  4. Applied insert-quire-fdp-add2.1

    \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\left(\sqrt{\color{blue}{\left(\left(\mathsf{qma}\left(\left(\left(re \cdot re\right)\right), im, im\right)\right)\right)}}\right) - re\right)\right)}\right)\]
  5. Final simplification2.1

    \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\left(\sqrt{\left(\left(\mathsf{qma}\left(\left(\left(re \cdot re\right)\right), im, im\right)\right)\right)}\right) - re\right)\right)}\right)\]

Reproduce

herbie shell --seed 2019164 
(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)))))