Average Error: 2.0 → 2.0
Time: 18.4s
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{re \cdot re + im \cdot im} - 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{re \cdot re + im \cdot im} - re\right)}
double f(double re, double im) {
        double r723541 = 0.5;
        double r723542 = /* ERROR: no posit support in C */;
        double r723543 = 2.0;
        double r723544 = /* ERROR: no posit support in C */;
        double r723545 = re;
        double r723546 = r723545 * r723545;
        double r723547 = im;
        double r723548 = r723547 * r723547;
        double r723549 = r723546 + r723548;
        double r723550 = sqrt(r723549);
        double r723551 = r723550 - r723545;
        double r723552 = r723544 * r723551;
        double r723553 = sqrt(r723552);
        double r723554 = r723542 * r723553;
        return r723554;
}

double f(double re, double im) {
        double r723555 = 0.5;
        double r723556 = 2.0;
        double r723557 = re;
        double r723558 = r723557 * r723557;
        double r723559 = im;
        double r723560 = r723559 * r723559;
        double r723561 = r723558 + r723560;
        double r723562 = sqrt(r723561);
        double r723563 = r723562 - r723557;
        double r723564 = r723556 * r723563;
        double r723565 = sqrt(r723564);
        double r723566 = r723555 * r723565;
        return r723566;
}

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. Final simplification2.0

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

Reproduce

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