Average Error: 2.0 → 2.0
Time: 15.7s
Precision: 64
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\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 r804645 = 0.5;
        double r804646 = 2.0;
        double r804647 = re;
        double r804648 = r804647 * r804647;
        double r804649 = im;
        double r804650 = r804649 * r804649;
        double r804651 = r804648 + r804650;
        double r804652 = sqrt(r804651);
        double r804653 = r804652 - r804647;
        double r804654 = r804646 * r804653;
        double r804655 = sqrt(r804654);
        double r804656 = r804645 * r804655;
        return r804656;
}

double f(double re, double im) {
        double r804657 = 0.5;
        double r804658 = 2.0;
        double r804659 = re;
        double r804660 = r804659 * r804659;
        double r804661 = im;
        double r804662 = r804661 * r804661;
        double r804663 = r804660 + r804662;
        double r804664 = sqrt(r804663);
        double r804665 = r804664 - r804659;
        double r804666 = r804658 * r804665;
        double r804667 = sqrt(r804666);
        double r804668 = r804657 * r804667;
        return r804668;
}

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

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 2019101 
(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)))))