Average Error: 37.5 → 13.3
Time: 22.5s
Precision: 64
Internal Precision: 3648
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\begin{array}{l} \mathbf{if}\;im \le -1.6557689079445023 \cdot 10^{-185} \lor \neg \left(im \le 6.819924578770398 \cdot 10^{-208}\right):\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot (\left(\sqrt{\sqrt{re^2 + im^2}^*}\right) \cdot \left(\sqrt{\sqrt{re^2 + im^2}^*}\right) + \left(-re\right))_*}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot (e^{\log_* (1 + \sqrt{2.0 \cdot \left(\sqrt{re^2 + im^2}^* - re\right)})} - 1)^*\\ \end{array}\]

Error

Bits error versus re

Bits error versus im

Derivation

  1. Split input into 2 regimes
  2. if im < -1.6557689079445023e-185 or 6.819924578770398e-208 < im

    1. Initial program 36.0

      \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
    2. Initial simplification11.4

      \[\leadsto 0.5 \cdot \sqrt{\left(\sqrt{re^2 + im^2}^* - re\right) \cdot 2.0}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt11.6

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

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

    if -1.6557689079445023e-185 < im < 6.819924578770398e-208

    1. Initial program 44.2

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

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

      \[\leadsto 0.5 \cdot \color{blue}{(e^{\log_* (1 + \sqrt{\left(\sqrt{re^2 + im^2}^* - re\right) \cdot 2.0})} - 1)^*}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification13.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -1.6557689079445023 \cdot 10^{-185} \lor \neg \left(im \le 6.819924578770398 \cdot 10^{-208}\right):\\ \;\;\;\;0.5 \cdot \sqrt{2.0 \cdot (\left(\sqrt{\sqrt{re^2 + im^2}^*}\right) \cdot \left(\sqrt{\sqrt{re^2 + im^2}^*}\right) + \left(-re\right))_*}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot (e^{\log_* (1 + \sqrt{2.0 \cdot \left(\sqrt{re^2 + im^2}^* - re\right)})} - 1)^*\\ \end{array}\]

Runtime

Time bar (total: 22.5s)Debug logProfile

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