Average Error: 2.1 → 2.1
Time: 6.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{re \cdot re + im \cdot im} + 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{re \cdot re + im \cdot im} + re\right)}
double f(double re, double im) {
        double r16238 = 0.5;
        double r16239 = /* ERROR: no posit support in C */;
        double r16240 = 2.0;
        double r16241 = /* ERROR: no posit support in C */;
        double r16242 = re;
        double r16243 = r16242 * r16242;
        double r16244 = im;
        double r16245 = r16244 * r16244;
        double r16246 = r16243 + r16245;
        double r16247 = sqrt(r16246);
        double r16248 = r16247 + r16242;
        double r16249 = r16241 * r16248;
        double r16250 = sqrt(r16249);
        double r16251 = r16239 * r16250;
        return r16251;
}

double f(double re, double im) {
        double r16252 = 0.5;
        double r16253 = 2.0;
        double r16254 = re;
        double r16255 = r16254 * r16254;
        double r16256 = im;
        double r16257 = r16256 * r16256;
        double r16258 = r16255 + r16257;
        double r16259 = sqrt(r16258);
        double r16260 = r16259 + r16254;
        double r16261 = r16253 * r16260;
        double r16262 = sqrt(r16261);
        double r16263 = r16252 * r16262;
        return r16263;
}

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(\frac{\left(\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\right)}{re}\right)\right)}\right)\]
  2. Final simplification2.1

    \[\leadsto 0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\]

Reproduce

herbie shell --seed 2019125 +o rules:numerics
(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)))))