Average Error: 38.5 → 12.9
Time: 20.1s
Precision: 64
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2} \cdot 0.5\]
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2} \cdot 0.5
double f(double re, double im) {
        double r684136 = 0.5;
        double r684137 = 2.0;
        double r684138 = re;
        double r684139 = r684138 * r684138;
        double r684140 = im;
        double r684141 = r684140 * r684140;
        double r684142 = r684139 + r684141;
        double r684143 = sqrt(r684142);
        double r684144 = r684143 - r684138;
        double r684145 = r684137 * r684144;
        double r684146 = sqrt(r684145);
        double r684147 = r684136 * r684146;
        return r684147;
}

double f(double re, double im) {
        double r684148 = re;
        double r684149 = im;
        double r684150 = hypot(r684148, r684149);
        double r684151 = r684150 - r684148;
        double r684152 = 2.0;
        double r684153 = r684151 * r684152;
        double r684154 = sqrt(r684153);
        double r684155 = 0.5;
        double r684156 = r684154 * r684155;
        return r684156;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 38.5

    \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
  2. Simplified12.9

    \[\leadsto \color{blue}{0.5 \cdot \sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2}}\]
  3. Final simplification12.9

    \[\leadsto \sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2} \cdot 0.5\]

Reproduce

herbie shell --seed 2019169 +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)))))