Average Error: 37.3 → 13.8
Time: 24.6s
Precision: 64
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[0.5 \cdot \left(\sqrt{\sqrt{2.0}} \cdot \sqrt{\left(\sqrt{re^2 + im^2}^* - re\right) \cdot \sqrt{2.0}}\right)\]
double f(double re, double im) {
        double r611938 = 0.5;
        double r611939 = 2.0;
        double r611940 = re;
        double r611941 = r611940 * r611940;
        double r611942 = im;
        double r611943 = r611942 * r611942;
        double r611944 = r611941 + r611943;
        double r611945 = sqrt(r611944);
        double r611946 = r611945 - r611940;
        double r611947 = r611939 * r611946;
        double r611948 = sqrt(r611947);
        double r611949 = r611938 * r611948;
        return r611949;
}

double f(double re, double im) {
        double r611950 = 0.5;
        double r611951 = 2.0;
        double r611952 = sqrt(r611951);
        double r611953 = sqrt(r611952);
        double r611954 = re;
        double r611955 = im;
        double r611956 = hypot(r611954, r611955);
        double r611957 = r611956 - r611954;
        double r611958 = r611957 * r611952;
        double r611959 = sqrt(r611958);
        double r611960 = r611953 * r611959;
        double r611961 = r611950 * r611960;
        return r611961;
}

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

Error

Bits error versus re

Bits error versus im

Derivation

  1. Initial program 37.3

    \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
  2. Simplified13.6

    \[\leadsto \color{blue}{0.5 \cdot \sqrt{\left(\sqrt{re^2 + im^2}^* - re\right) \cdot 2.0}}\]
  3. Using strategy rm
  4. Applied sqrt-prod13.8

    \[\leadsto 0.5 \cdot \color{blue}{\left(\sqrt{\sqrt{re^2 + im^2}^* - re} \cdot \sqrt{2.0}\right)}\]
  5. Using strategy rm
  6. Applied add-sqr-sqrt13.8

    \[\leadsto 0.5 \cdot \left(\sqrt{\sqrt{re^2 + im^2}^* - re} \cdot \sqrt{\color{blue}{\sqrt{2.0} \cdot \sqrt{2.0}}}\right)\]
  7. Applied sqrt-prod13.9

    \[\leadsto 0.5 \cdot \left(\sqrt{\sqrt{re^2 + im^2}^* - re} \cdot \color{blue}{\left(\sqrt{\sqrt{2.0}} \cdot \sqrt{\sqrt{2.0}}\right)}\right)\]
  8. Applied associate-*r*13.9

    \[\leadsto 0.5 \cdot \color{blue}{\left(\left(\sqrt{\sqrt{re^2 + im^2}^* - re} \cdot \sqrt{\sqrt{2.0}}\right) \cdot \sqrt{\sqrt{2.0}}\right)}\]
  9. Using strategy rm
  10. Applied add-sqr-sqrt14.8

    \[\leadsto 0.5 \cdot \left(\left(\sqrt{\color{blue}{\sqrt{\sqrt{re^2 + im^2}^*} \cdot \sqrt{\sqrt{re^2 + im^2}^*}} - re} \cdot \sqrt{\sqrt{2.0}}\right) \cdot \sqrt{\sqrt{2.0}}\right)\]
  11. Using strategy rm
  12. Applied sqrt-unprod14.8

    \[\leadsto 0.5 \cdot \left(\color{blue}{\sqrt{\left(\sqrt{\sqrt{re^2 + im^2}^*} \cdot \sqrt{\sqrt{re^2 + im^2}^*} - re\right) \cdot \sqrt{2.0}}} \cdot \sqrt{\sqrt{2.0}}\right)\]
  13. Simplified13.8

    \[\leadsto 0.5 \cdot \left(\sqrt{\color{blue}{\sqrt{2.0} \cdot \left(\sqrt{re^2 + im^2}^* - re\right)}} \cdot \sqrt{\sqrt{2.0}}\right)\]
  14. Final simplification13.8

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

Reproduce

herbie shell --seed 2019101 +o rules:numerics
(FPCore (re im)
  :name "math.sqrt on complex, imaginary part, im greater than 0 branch"
  (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))