Average Error: 29.1 → 16.8
Time: 10.6s
Precision: 64
Internal Precision: 128
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;re \le -2.158725719313022 \cdot 10^{+148}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le -1.8470168009869996 \cdot 10^{-301}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{elif}\;re \le 4.2122813192253714 \cdot 10^{-256}:\\ \;\;\;\;im\\ \mathbf{elif}\;re \le 1.7910245925154982 \cdot 10^{+121}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{else}:\\ \;\;\;\;re\\ \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 re < -2.158725719313022e+148

    1. Initial program 57.6

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

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

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

    if -2.158725719313022e+148 < re < -1.8470168009869996e-301 or 4.2122813192253714e-256 < re < 1.7910245925154982e+121

    1. Initial program 18.9

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

    if -1.8470168009869996e-301 < re < 4.2122813192253714e-256

    1. Initial program 28.2

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

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

    if 1.7910245925154982e+121 < re

    1. Initial program 51.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -2.158725719313022 \cdot 10^{+148}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le -1.8470168009869996 \cdot 10^{-301}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{elif}\;re \le 4.2122813192253714 \cdot 10^{-256}:\\ \;\;\;\;im\\ \mathbf{elif}\;re \le 1.7910245925154982 \cdot 10^{+121}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{else}:\\ \;\;\;\;re\\ \end{array}\]

Reproduce

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

Details

Time bar (total: 9.1s)Debug log

start19.0ms

Algorithm
intervals

setup16.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 30.9b

localize10.0ms

Local error

Found 2 expressions with local error:

30.9b
(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)))

series34.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

19.0ms
(sqrt (+ (* re re) (* im im)))
15.0ms
(+ (* re re) (* im im))

simplify197.0ms

Counts
13 → 31
Calls

13 calls. Slowest were:

112.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
34.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
12.0ms
(* (exp (* re re)) (exp (* im im)))

prune322.0ms

Pruning

5 alts after pruning (4 fresh and 1 done)

Merged error: 9.6b

localize22.0ms

Local error

Found 4 expressions with local error:

31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))
0.3b
(* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im)))))
0.1b
(sqrt (cbrt (+ (* re re) (* im im))))

rewrite22.0ms

Algorithm
rewrite-expression-head
Counts
4 → 69
Calls

4 calls. Slowest were:

12.0ms
(* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im)))))
4.0ms
(sqrt (cbrt (+ (* re re) (* im im))))
2.0ms
(cbrt (+ (* re re) (* im im)))

series422.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

121.0ms
(* (fabs (cbrt (+ (* re re) (* im im)))) (sqrt (cbrt (+ (* re re) (* im im)))))
106.0ms
(cbrt (+ (* re re) (* im im)))
102.0ms
(cbrt (+ (* re re) (* im im)))
93.0ms
(sqrt (cbrt (+ (* re re) (* im im))))

simplify1.8s

Counts
48 → 81
Calls

48 calls. Slowest were:

594.0ms
(+ (* (fabs (pow (+ (pow im 2) (pow re 2)) 1/3)) (pow im 1/3)) (* 1/6 (* (* (pow re 2) (fabs (pow (+ (pow im 2) (pow re 2)) 1/3))) (pow (/ 1 (pow im 5)) 1/3))))
207.0ms
(sqrt (cbrt (+ (* (* re re) (* re re)) (- (* (* im im) (* im im)) (* (* re re) (* im im))))))
178.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune841.0ms

Pruning

6 alts after pruning (5 fresh and 1 done)

Merged error: 9.6b

localize13.0ms

Local error

Found 4 expressions with local error:

31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))

rewrite5.0ms

Algorithm
rewrite-expression-head
Counts
4 → 52
Calls

4 calls. Slowest were:

1.0ms
(cbrt (+ (* re re) (* im im)))
1.0ms
(cbrt (+ (* re re) (* im im)))
1.0ms
(cbrt (+ (* re re) (* im im)))

series460.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

139.0ms
(cbrt (+ (* re re) (* im im)))
125.0ms
(cbrt (+ (* re re) (* im im)))
105.0ms
(cbrt (+ (* re re) (* im im)))
91.0ms
(cbrt (+ (* re re) (* im im)))

simplify1.0s

Counts
32 → 64
Calls

32 calls. Slowest were:

153.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
148.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
136.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune875.0ms

Pruning

6 alts after pruning (5 fresh and 1 done)

Merged error: 9.6b

localize22.0ms

Local error

Found 4 expressions with local error:

31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))
31.9b
(cbrt (+ (* re re) (* im im)))

rewrite5.0ms

Algorithm
rewrite-expression-head
Counts
4 → 52
Calls

4 calls. Slowest were:

1.0ms
(cbrt (+ (* re re) (* im im)))
1.0ms
(cbrt (+ (* re re) (* im im)))
1.0ms
(cbrt (+ (* re re) (* im im)))

series444.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

121.0ms
(cbrt (+ (* re re) (* im im)))
112.0ms
(cbrt (+ (* re re) (* im im)))
111.0ms
(cbrt (+ (* re re) (* im im)))
100.0ms
(cbrt (+ (* re re) (* im im)))

simplify962.0ms

Counts
32 → 64
Calls

32 calls. Slowest were:

192.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
148.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
124.0ms
(cbrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune980.0ms

Pruning

6 alts after pruning (4 fresh and 2 done)

Merged error: 9.6b

regimes445.0ms

Accuracy

57% (9.3b remaining)

Error of 16.8b against oracle of 7.5b and baseline of 29.1b

bsearch212.0ms