Average Error: 2.1 → 2.0
Time: 25.0s
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{\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(\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 r567019 = 0.5;
        double r567020 = /* ERROR: no posit support in C */;
        double r567021 = 2.0;
        double r567022 = /* ERROR: no posit support in C */;
        double r567023 = re;
        double r567024 = r567023 * r567023;
        double r567025 = im;
        double r567026 = r567025 * r567025;
        double r567027 = r567024 + r567026;
        double r567028 = sqrt(r567027);
        double r567029 = r567028 - r567023;
        double r567030 = r567022 * r567029;
        double r567031 = sqrt(r567030);
        double r567032 = r567020 * r567031;
        return r567032;
}

double f(double re, double im) {
        double r567033 = 0.5;
        double r567034 = 2.0;
        double r567035 = re;
        double r567036 = r567035 * r567035;
        double r567037 = /*Error: no posit support in C */;
        double r567038 = im;
        double r567039 = /*Error: no posit support in C */;
        double r567040 = /*Error: no posit support in C */;
        double r567041 = sqrt(r567040);
        double r567042 = r567041 - r567035;
        double r567043 = r567034 * r567042;
        double r567044 = sqrt(r567043);
        double r567045 = r567033 * r567044;
        return r567045;
}

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(\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.1

    \[\leadsto \left(0.5\right) \cdot \left(\sqrt{\left(\left(2.0\right) \cdot \left(\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(\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 2019155 
(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)))))