Average Error: 2.0 → 2.1
Time: 7.5s
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{\sqrt{re \cdot re + im \cdot im} \cdot 2.0 + re \cdot 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)
0.5 \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} \cdot 2.0 + re \cdot 2.0}
double f(double re, double im) {
        double r15119 = 0.5;
        double r15120 = /* ERROR: no posit support in C */;
        double r15121 = 2.0;
        double r15122 = /* ERROR: no posit support in C */;
        double r15123 = re;
        double r15124 = r15123 * r15123;
        double r15125 = im;
        double r15126 = r15125 * r15125;
        double r15127 = r15124 + r15126;
        double r15128 = sqrt(r15127);
        double r15129 = r15128 + r15123;
        double r15130 = r15122 * r15129;
        double r15131 = sqrt(r15130);
        double r15132 = r15120 * r15131;
        return r15132;
}

double f(double re, double im) {
        double r15133 = 0.5;
        double r15134 = re;
        double r15135 = r15134 * r15134;
        double r15136 = im;
        double r15137 = r15136 * r15136;
        double r15138 = r15135 + r15137;
        double r15139 = sqrt(r15138);
        double r15140 = 2.0;
        double r15141 = r15139 * r15140;
        double r15142 = r15134 * r15140;
        double r15143 = r15141 + r15142;
        double r15144 = sqrt(r15143);
        double r15145 = r15133 * r15144;
        return r15145;
}

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 distribute-rgt-in2.1

    \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\color{blue}{\left(\frac{\left(\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right) \cdot \left(2.0\right)\right)}{\left(re \cdot \left(2.0\right)\right)}\right)}}\right)\]
  4. Final simplification2.1

    \[\leadsto 0.5 \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} \cdot 2.0 + re \cdot 2.0}\]

Reproduce

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