Average Error: 2.0 → 2.0
Time: 16.1s
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)\]
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\left(\mathsf{qma}\left(\left(\left(re \cdot re\right)\right), im, im\right)\right)} - re\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)
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{\left(\mathsf{qma}\left(\left(\left(re \cdot re\right)\right), im, im\right)\right)} - re\right)}
double f(double re, double im) {
        double r522902 = 0.5;
        double r522903 = /* ERROR: no posit support in C */;
        double r522904 = 2.0;
        double r522905 = /* ERROR: no posit support in C */;
        double r522906 = re;
        double r522907 = r522906 * r522906;
        double r522908 = im;
        double r522909 = r522908 * r522908;
        double r522910 = r522907 + r522909;
        double r522911 = sqrt(r522910);
        double r522912 = r522911 - r522906;
        double r522913 = r522905 * r522912;
        double r522914 = sqrt(r522913);
        double r522915 = r522903 * r522914;
        return r522915;
}

double f(double re, double im) {
        double r522916 = 0.5;
        double r522917 = 2.0;
        double r522918 = re;
        double r522919 = r522918 * r522918;
        double r522920 = /*Error: no posit support in C */;
        double r522921 = im;
        double r522922 = /*Error: no posit support in C */;
        double r522923 = /*Error: no posit support in C */;
        double r522924 = sqrt(r522923);
        double r522925 = r522924 - r522918;
        double r522926 = r522917 * r522925;
        double r522927 = sqrt(r522926);
        double r522928 = r522916 * r522927;
        return r522928;
}

Error

Bits error versus re

Bits error versus im

Derivation

  1. Initial program 2.0

    \[\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.0

    \[\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.0

    \[\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.0

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

Reproduce

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