Average Error: 29.7 → 17.1
Time: 9.4s
Precision: 64
Internal Precision: 128
\[\sqrt{re \cdot re + im \cdot im}\]
\[\begin{array}{l} \mathbf{if}\;re \le -1.150911151621305 \cdot 10^{+154}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le 1.2497447225446502 \cdot 10^{+148}:\\ \;\;\;\;\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 3 regimes
  2. if re < -1.150911151621305e+154

    1. Initial program 59.3

      \[\sqrt{re \cdot re + im \cdot im}\]
    2. Using strategy rm
    3. Applied add-exp-log59.3

      \[\leadsto \color{blue}{e^{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}}\]
    4. Taylor expanded around -inf 8.0

      \[\leadsto \color{blue}{-1 \cdot re}\]
    5. Simplified8.0

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

    if -1.150911151621305e+154 < re < 1.2497447225446502e+148

    1. Initial program 20.1

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

    if 1.2497447225446502e+148 < re

    1. Initial program 58.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;re \le -1.150911151621305 \cdot 10^{+154}:\\ \;\;\;\;-re\\ \mathbf{elif}\;re \le 1.2497447225446502 \cdot 10^{+148}:\\ \;\;\;\;\sqrt{im \cdot im + re \cdot re}\\ \mathbf{else}:\\ \;\;\;\;re\\ \end{array}\]

Reproduce

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

Details

Time bar (total: 8.6s)Debug log

sample23.0ms

Algorithm
intervals

simplify2.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

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

prune5.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 29.0b

localize10.0ms

Local error

Found 2 expressions with local error:

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

series50.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

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

simplify219.0ms

Counts
13 → 31
Calls

13 calls. Slowest were:

131.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
40.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))
11.0ms
(* (exp (* re re)) (exp (* im im)))

prune249.0ms

Pruning

6 alts after pruning (5 fresh and 1 done)

Merged error: 7.9b

localize7.0ms

Local error

Found 3 expressions with local error:

29.0b
(sqrt (+ (* re re) (* im im)))
5.7b
(exp (log (sqrt (+ (* re re) (* im im)))))
0.0b
(+ (* re re) (* im im))

rewrite7.0ms

Algorithm
rewrite-expression-head
Counts
3 → 46
Calls

3 calls. Slowest were:

3.0ms
(exp (log (sqrt (+ (* re re) (* im im)))))
2.0ms
(+ (* re re) (* im im))
2.0ms
(sqrt (+ (* re re) (* im im)))

series62.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

26.0ms
(sqrt (+ (* re re) (* im im)))
21.0ms
(exp (log (sqrt (+ (* re re) (* im im)))))
15.0ms
(+ (* re re) (* im im))

simplify426.0ms

Counts
30 → 55
Calls

30 calls. Slowest were:

146.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
119.0ms
(exp (log (sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))))
51.0ms
(sqrt (+ (pow (* re re) 3) (pow (* im im) 3)))

prune499.0ms

Pruning

7 alts after pruning (6 fresh and 1 done)

Merged error: 7.9b

localize40.0ms

Local error

Found 4 expressions with local error:

29.0b
(sqrt (+ (* re re) (* im im)))
29.0b
(sqrt (+ (* re re) (* im im)))
29.0b
(sqrt (+ (* re re) (* im im)))
5.8b
(pow (exp (* (cbrt (log (sqrt (+ (* re re) (* im im))))) (cbrt (log (sqrt (+ (* re re) (* im im))))))) (cbrt (log (sqrt (+ (* re re) (* im im))))))

rewrite21.0ms

Algorithm
rewrite-expression-head
Counts
4 → 65
Calls

4 calls. Slowest were:

9.0ms
(pow (exp (* (cbrt (log (sqrt (+ (* re re) (* im im))))) (cbrt (log (sqrt (+ (* re re) (* im im))))))) (cbrt (log (sqrt (+ (* re re) (* im im))))))
4.0ms
(sqrt (+ (* re re) (* im im)))
4.0ms
(sqrt (+ (* re re) (* im im)))

series419.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

329.0ms
(pow (exp (* (cbrt (log (sqrt (+ (* re re) (* im im))))) (cbrt (log (sqrt (+ (* re re) (* im im))))))) (cbrt (log (sqrt (+ (* re re) (* im im))))))
31.0ms
(sqrt (+ (* re re) (* im im)))
30.0ms
(sqrt (+ (* re re) (* im im)))
29.0ms
(sqrt (+ (* re re) (* im im)))

simplify662.0ms

Counts
45 → 77
Calls

45 calls. Slowest were:

120.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
108.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))
102.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune1.1s

Pruning

7 alts after pruning (6 fresh and 1 done)

Merged error: 7.9b

localize46.0ms

Local error

Found 4 expressions with local error:

30.3b
(log (+ (* re re) (* im im)))
29.0b
(sqrt (+ (* re re) (* im im)))
29.0b
(sqrt (+ (* re re) (* im im)))
5.7b
(pow (pow (exp (* (cbrt (log (sqrt (+ (* re re) (* im im))))) (cbrt (log (sqrt (+ (* re re) (* im im))))))) (cbrt 1/2)) (cbrt (log (+ (* re re) (* im im)))))

rewrite13.0ms

Algorithm
rewrite-expression-head
Counts
4 → 67
Calls

4 calls. Slowest were:

5.0ms
(pow (pow (exp (* (cbrt (log (sqrt (+ (* re re) (* im im))))) (cbrt (log (sqrt (+ (* re re) (* im im))))))) (cbrt 1/2)) (cbrt (log (+ (* re re) (* im im)))))
4.0ms
(log (+ (* re re) (* im im)))
2.0ms
(sqrt (+ (* re re) (* im im)))

series748.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

661.0ms
(pow (pow (exp (* (cbrt (log (sqrt (+ (* re re) (* im im))))) (cbrt (log (sqrt (+ (* re re) (* im im))))))) (cbrt 1/2)) (cbrt (log (+ (* re re) (* im im)))))
41.0ms
(log (+ (* re re) (* im im)))
25.0ms
(sqrt (+ (* re re) (* im im)))
21.0ms
(sqrt (+ (* re re) (* im im)))

simplify1.4s

Counts
47 → 79
Calls

47 calls. Slowest were:

267.0ms
(exp (* (* (cbrt 1/2) (log (/ -1 re))) (pow -2 1/3)))
174.0ms
(log (- (* (* re re) (* re re)) (* (* im im) (* im im))))
169.0ms
(sqrt (- (* (* re re) (* re re)) (* (* im im) (* im im))))

prune1.2s

Pruning

8 alts after pruning (7 fresh and 1 done)

Merged error: 7.9b

regimes464.0ms

Accuracy

57.2% (9.4b remaining)

Error of 17.1b against oracle of 7.7b and baseline of 29.7b

bsearch69.0ms

end0.0ms

sample931.0ms

Algorithm
intervals