Average Error: 2.0 → 2.0
Time: 40.6s
Precision: 64
\[\left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\frac{\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(\frac{\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 r1020024 = 0.5;
        double r1020025 = /* ERROR: no posit support in C */;
        double r1020026 = 2.0;
        double r1020027 = /* ERROR: no posit support in C */;
        double r1020028 = re;
        double r1020029 = r1020028 * r1020028;
        double r1020030 = im;
        double r1020031 = r1020030 * r1020030;
        double r1020032 = r1020029 + r1020031;
        double r1020033 = sqrt(r1020032);
        double r1020034 = r1020033 + r1020028;
        double r1020035 = r1020027 * r1020034;
        double r1020036 = sqrt(r1020035);
        double r1020037 = r1020025 * r1020036;
        return r1020037;
}

double f(double re, double im) {
        double r1020038 = 0.5;
        double r1020039 = 2.0;
        double r1020040 = re;
        double r1020041 = r1020040 * r1020040;
        double r1020042 = /*Error: no posit support in C */;
        double r1020043 = im;
        double r1020044 = /*Error: no posit support in C */;
        double r1020045 = /*Error: no posit support in C */;
        double r1020046 = sqrt(r1020045);
        double r1020047 = r1020046 + r1020040;
        double r1020048 = r1020039 * r1020047;
        double r1020049 = sqrt(r1020048);
        double r1020050 = r1020038 * r1020049;
        return r1020050;
}

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(\frac{\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(\frac{\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(\frac{\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 2019158 
(FPCore (re im)
  :name "math.sqrt on complex, real part"
  (*.p16 (real->posit16 0.5) (sqrt.p16 (*.p16 (real->posit16 2.0) (+.p16 (sqrt.p16 (+.p16 (*.p16 re re) (*.p16 im im))) re)))))