Average Error: 29.5 → 16.5
Time: 6.0s
Precision: 64
Internal Precision: 576
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;-re \le -1.0305028035679078 \cdot 10^{+169}:\\ \;\;\;\;re\\ \mathbf{if}\;-re \le 9.933059761718632 \cdot 10^{-304}:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{if}\;-re \le 1.1532680417978031 \cdot 10^{-275}:\\ \;\;\;\;im\\ \mathbf{if}\;-re \le 7.1234069541499015 \cdot 10^{+137}:\\ \;\;\;\;\sqrt{re \cdot re + im \cdot im}\\ \mathbf{else}:\\ \;\;\;\;-re\\ \end{array}\]

Error

Bits error versus re

Bits error versus im

Try it out

  1. Inputs

  2. Original Output:

    Herbie Output:

Derivation

  1. Split input into 4 regimes
  2. if (- re) < -1.0305028035679078e+169

    1. Initial program 59.3

      \[\sqrt{re \cdot re + im \cdot im}\]
    2. Taylor expanded around inf 5.9

      \[\leadsto \color{blue}{re}\]

    if -1.0305028035679078e+169 < (- re) < 9.933059761718632e-304 or 1.1532680417978031e-275 < (- re) < 7.1234069541499015e+137

    1. Initial program 19.5

      \[\sqrt{re \cdot re + im \cdot im}\]

    if 9.933059761718632e-304 < (- re) < 1.1532680417978031e-275

    1. Initial program 30.6

      \[\sqrt{re \cdot re + im \cdot im}\]
    2. Taylor expanded around 0 30.7

      \[\leadsto \color{blue}{im}\]

    if 7.1234069541499015e+137 < (- re)

    1. Initial program 55.1

      \[\sqrt{re \cdot re + im \cdot im}\]
    2. Taylor expanded around -inf 8.2

      \[\leadsto \color{blue}{-1 \cdot re}\]
    3. Applied simplify8.2

      \[\leadsto \color{blue}{-re}\]
  3. Recombined 4 regimes into one program.

Runtime

Time bar (total: 6.0s)Debug logProfile

herbie shell --seed '#(1072361757 3390613284 2339397988 1175251238 145061547 3101881848)' 
(FPCore (re im)
  :name "math.abs on complex"
  (sqrt (+ (* re re) (* im im))))