Average Error: 29.5 → 23.1
Time: 2.8s
Precision: 64
Internal Precision: 128
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;im \le -5.693695950953394 \cdot 10^{-257}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{elif}\;im \le -4.419307702247496 \cdot 10^{-287}:\\ \;\;\;\;re\\ \mathbf{elif}\;im \le 3.46685258533055 \cdot 10^{-260}:\\ \;\;\;\;-re\\ \mathbf{elif}\;im \le 1.9463971507661055 \cdot 10^{-202}:\\ \;\;\;\;re\\ \mathbf{elif}\;im \le 2.2194224750753604 \cdot 10^{+144}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{else}:\\ \;\;\;\;im\\ \end{array}\]

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. Split input into 4 regimes
  2. if im < -5.693695950953394e-257 or 1.9463971507661055e-202 < im < 2.2194224750753604e+144

    1. Initial program 24.5

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

    if -5.693695950953394e-257 < im < -4.419307702247496e-287 or 3.46685258533055e-260 < im < 1.9463971507661055e-202

    1. Initial program 29.5

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

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

    if -4.419307702247496e-287 < im < 3.46685258533055e-260

    1. Initial program 29.6

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

      \[\leadsto \color{blue}{-1 \cdot re}\]
    3. Simplified32.1

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

    if 2.2194224750753604e+144 < im

    1. Initial program 55.9

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

      \[\leadsto \color{blue}{im}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification23.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;im \le -5.693695950953394 \cdot 10^{-257}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{elif}\;im \le -4.419307702247496 \cdot 10^{-287}:\\ \;\;\;\;re\\ \mathbf{elif}\;im \le 3.46685258533055 \cdot 10^{-260}:\\ \;\;\;\;-re\\ \mathbf{elif}\;im \le 1.9463971507661055 \cdot 10^{-202}:\\ \;\;\;\;re\\ \mathbf{elif}\;im \le 2.2194224750753604 \cdot 10^{+144}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{else}:\\ \;\;\;\;im\\ \end{array}\]

Reproduce

herbie shell --seed 2018360 
(FPCore (re im)
  :name "math.abs on complex"
  (sqrt (+ (* re re) (* im im))))

Details

Time bar (total: 1.1s)Debug log

start21.0ms

Algorithm
intervals

setup20.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 29.8b

localize13.0ms

Local error

Found 2 expressions with local error:

29.8b
(sqrt (+ (* re re) (* im im)))
0.0b
(+ (* re re) (* im im))

rewrite4.0ms

Algorithm
rewrite-expression-head
Counts
2 → 25
Calls

2 calls. Slowest were:

2.0ms
(+ (* re re) (* im im))
2.0ms
(sqrt (+ (* re re) (* im im)))

series58.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

33.0ms
(sqrt (+ (* re re) (* im im)))
25.0ms
(+ (* re re) (* im im))

simplify181.0ms

Counts
13 → 31
Calls

13 calls. Slowest were:

107.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
39.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
7.0ms
(* (exp (* re re)) (exp (* im im)))

prune289.0ms

Pruning

4 alts after pruning (3 fresh and 1 done)

Merged error: 9.7b

localize0.0ms

Local error

Found 0 expressions with local error:

rewrite0.0ms

Algorithm
rewrite-expression-head
Counts
0 → 0
Calls

0 calls. Slowest were:

series0.0ms

Counts
0 → 0
Calls

0 calls. Slowest were:

simplify0.0ms

Counts
0 → 0
Calls

0 calls. Slowest were:

prune3.0ms

Pruning

4 alts after pruning (2 fresh and 2 done)

Merged error: 9.7b

localize0.0ms

Local error

Found 0 expressions with local error:

rewrite0.0ms

Algorithm
rewrite-expression-head
Counts
0 → 0
Calls

0 calls. Slowest were:

series0.0ms

Counts
0 → 0
Calls

0 calls. Slowest were:

simplify0.0ms

Counts
0 → 0
Calls

0 calls. Slowest were:

prune2.0ms

Pruning

4 alts after pruning (1 fresh and 3 done)

Merged error: 9.7b

localize2.0ms

Local error

Found 0 expressions with local error:

rewrite0.0ms

Algorithm
rewrite-expression-head
Counts
0 → 0
Calls

0 calls. Slowest were:

series0.0ms

Counts
0 → 0
Calls

0 calls. Slowest were:

simplify0.0ms

Counts
0 → 0
Calls

0 calls. Slowest were:

prune0.0ms

Pruning

4 alts after pruning (0 fresh and 4 done)

Merged error: 9.7b

regimes313.0ms

Accuracy

29.1% (15.5b remaining)

Error of 23.1b against oracle of 7.6b and baseline of 29.5b

bsearch164.0ms