Average Error: 38.6 → 24.4
Time: 3.5s
Precision: binary64
\[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -1.23772994386065916 \cdot 10^{153}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\ \mathbf{elif}\;im \le -9.2744491806840281 \cdot 10^{-50}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} + re}\right)}\\ \mathbf{elif}\;im \le 6.8069543057829951 \cdot 10^{-253}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 2.39076102220898808 \cdot 10^{74}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \end{array}\]

Error

Bits error versus re

Bits error versus im

Derivation

  1. Split input into 5 regimes
  2. if im < -1.23772994386065916e153

    1. Initial program 63.6

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied flip--63.6

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    4. Simplified63.6

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{0 + {im}^{2}}}{\sqrt{re \cdot re + im \cdot im} + re}}\]
    5. Taylor expanded around -inf 8.0

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

    if -1.23772994386065916e153 < im < -9.2744491806840281e-50

    1. Initial program 20.6

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied flip--25.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\frac{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im} - re \cdot re}{\sqrt{re \cdot re + im \cdot im} + re}}}\]
    4. Simplified20.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{0 + {im}^{2}}}{\sqrt{re \cdot re + im \cdot im} + re}}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity20.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{0 + {im}^{2}}{\color{blue}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}}}\]
    7. Applied add-sqr-sqrt20.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \frac{\color{blue}{\sqrt{0 + {im}^{2}} \cdot \sqrt{0 + {im}^{2}}}}{1 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}}\]
    8. Applied times-frac20.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(\frac{\sqrt{0 + {im}^{2}}}{1} \cdot \frac{\sqrt{0 + {im}^{2}}}{\sqrt{re \cdot re + im \cdot im} + re}\right)}}\]
    9. Simplified20.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{\left|im\right|} \cdot \frac{\sqrt{0 + {im}^{2}}}{\sqrt{re \cdot re + im \cdot im} + re}\right)}\]
    10. Simplified20.1

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \color{blue}{\frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} + re}}\right)}\]

    if -9.2744491806840281e-50 < im < 6.8069543057829951e-253

    1. Initial program 38.4

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Taylor expanded around -inf 37.8

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \color{blue}{\left(-2 \cdot re\right)}}\]

    if 6.8069543057829951e-253 < im < 2.39076102220898808e74

    1. Initial program 30.5

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt30.5

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\color{blue}{\sqrt{re \cdot re + im \cdot im} \cdot \sqrt{re \cdot re + im \cdot im}}} - re\right)}\]
    4. Applied sqrt-prod30.7

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

    if 2.39076102220898808e74 < im

    1. Initial program 48.7

      \[0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Taylor expanded around 0 11.7

      \[\leadsto 0.5 \cdot \sqrt{2 \cdot \left(\color{blue}{im} - re\right)}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification24.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -1.23772994386065916 \cdot 10^{153}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\ \mathbf{elif}\;im \le -9.2744491806840281 \cdot 10^{-50}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} + re}\right)}\\ \mathbf{elif}\;im \le 6.8069543057829951 \cdot 10^{-253}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\ \mathbf{elif}\;im \le 2.39076102220898808 \cdot 10^{74}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\ \end{array}\]

Reproduce

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