Average Error: 25.7 → 25.5
Time: 16.1s
Precision: 64
Internal Precision: 128
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\begin{array}{l} \mathbf{if}\;y.im \le 9.816734328325423 \cdot 10^{+110}:\\ \;\;\;\;\frac{\frac{1}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{y.re \cdot x.im - x.re \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \end{array}\]

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if y.im < 9.816734328325423e+110

    1. Initial program 22.7

      \[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt22.7

      \[\leadsto \frac{x.im \cdot y.re - x.re \cdot y.im}{\color{blue}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
    4. Applied associate-/r*22.6

      \[\leadsto \color{blue}{\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity22.6

      \[\leadsto \frac{\frac{\color{blue}{1 \cdot \left(x.im \cdot y.re - x.re \cdot y.im\right)}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    7. Applied associate-/l*22.7

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{x.im \cdot y.re - x.re \cdot y.im}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]

    if 9.816734328325423e+110 < y.im

    1. Initial program 40.4

      \[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt40.4

      \[\leadsto \frac{x.im \cdot y.re - x.re \cdot y.im}{\color{blue}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
    4. Applied associate-/r*40.4

      \[\leadsto \color{blue}{\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
    5. Taylor expanded around 0 39.6

      \[\leadsto \frac{\color{blue}{-1 \cdot x.re}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    6. Simplified39.6

      \[\leadsto \frac{\color{blue}{-x.re}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification25.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.im \le 9.816734328325423 \cdot 10^{+110}:\\ \;\;\;\;\frac{\frac{1}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{y.re \cdot x.im - x.re \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019016 
(FPCore (x.re x.im y.re y.im)
  :name "_divideComplex, imaginary part"
  (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))

Details

Time bar (total: 14.9s)Debug log

sample62.0ms

Algorithm
intervals
Results
274×(pre true 80)
274×(body real 80)

simplify45.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
45.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im)))

prune6.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 26.5b

localize26.0ms

Local error

Found 3 expressions with local error:

26.5b
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im)))
1.2b
(- (* x.im y.re) (* x.re y.im))
0.0b
(+ (* y.re y.re) (* y.im y.im))

rewrite15.0ms

Algorithm
rewrite-expression-head
Rules
11×add-cube-cbrt
11×*-un-lft-identity
11×add-sqr-sqrt
times-frac
add-log-exp
add-exp-log
add-cbrt-cube
associate-/l*
associate-/r*
pow1
associate-/l/
flip--
flip-+
associate-/r/
flip3--
flip3-+
div-inv
div-exp
div-sub
diff-log
frac-2neg
sub-neg
sum-log
clear-num
+-commutative
cbrt-undiv
Counts
3 → 55
Calls
3 calls:
Slowest
7.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im)))
4.0ms
(+ (* y.re y.re) (* y.im y.im))
3.0ms
(- (* x.im y.re) (* x.re y.im))

series169.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
92.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im)))
52.0ms
(- (* x.im y.re) (* x.re y.im))
24.0ms
(+ (* y.re y.re) (* y.im y.im))

simplify1.4s

Counts
41 → 64
Calls
41 calls:
Slowest
261.0ms
(- (pow (* x.im y.re) 3) (pow (* x.re y.im) 3))
204.0ms
(- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.re y.im)))
180.0ms
(+ (* (* y.re y.re) (* y.re y.re)) (- (* (* y.im y.im) (* y.im y.im)) (* (* y.re y.re) (* y.im y.im))))
100.0ms
(/ (* (* (- (* x.im y.re) (* x.re y.im)) (- (* x.im y.re) (* x.re y.im))) (- (* x.im y.re) (* x.re y.im))) (* (* (+ (* y.re y.re) (* y.im y.im)) (+ (* y.re y.re) (* y.im y.im))) (+ (* y.re y.re) (* y.im y.im))))
71.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im)))

prune834.0ms

Pruning

12 alts after pruning (12 fresh and 0 done)

Merged error: 26.0b

localize9.0ms

Local error

Found 4 expressions with local error:

28.2b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
28.2b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
16.5b
(/ (- (* x.im y.re) (* x.re y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
1.2b
(- (* x.im y.re) (* x.re y.im))

rewrite28.0ms

Algorithm
rewrite-expression-head
Rules
23×add-sqr-sqrt
21×add-cube-cbrt
21×*-un-lft-identity
18×sqrt-prod
18×times-frac
add-log-exp
add-exp-log
sqrt-div
add-cbrt-cube
associate-/r*
pow1
associate-/l*
flip-+
flip3-+
associate-/l/
flip--
associate-/r/
pow1/2
flip3--
rem-sqrt-square
div-inv
div-exp
div-sub
diff-log
frac-2neg
sub-neg
clear-num
cbrt-undiv
Counts
4 → 84
Calls
4 calls:
Slowest
14.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
4.0ms
(- (* x.im y.re) (* x.re y.im))
2.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
2.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

series206.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
96.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
46.0ms
(- (* x.im y.re) (* x.re y.im))
32.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
31.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

simplify2.2s

Counts
76 → 96
Calls
76 calls:
Slowest
271.0ms
(- (pow (* x.im y.re) 3) (pow (* x.re y.im) 3))
252.0ms
(- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.re y.im)))
219.0ms
(/ (* (* (- (* x.im y.re) (* x.re y.im)) (- (* x.im y.re) (* x.re y.im))) (- (* x.im y.re) (* x.re y.im))) (* (* (sqrt (+ (* y.re y.re) (* y.im y.im))) (sqrt (+ (* y.re y.re) (* y.im y.im)))) (sqrt (+ (* y.re y.re) (* y.im y.im)))))
143.0ms
(sqrt (+ (* (* y.re y.re) (* y.re y.re)) (- (* (* y.im y.im) (* y.im y.im)) (* (* y.re y.re) (* y.im y.im)))))
131.0ms
(sqrt (- (* (* y.re y.re) (* y.re y.re)) (* (* y.im y.im) (* y.im y.im))))

prune1.3s

Pruning

13 alts after pruning (13 fresh and 0 done)

Merged error: 22.9b

localize28.0ms

Local error

Found 4 expressions with local error:

28.2b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
28.2b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
16.5b
(/ (- (* y.re x.im) (* y.im x.re)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
1.2b
(- (* y.re x.im) (* y.im x.re))

rewrite32.0ms

Algorithm
rewrite-expression-head
Rules
23×add-sqr-sqrt
21×add-cube-cbrt
21×*-un-lft-identity
18×sqrt-prod
18×times-frac
add-log-exp
add-exp-log
sqrt-div
add-cbrt-cube
associate-/r*
pow1
associate-/l*
flip-+
flip3-+
associate-/l/
flip--
associate-/r/
pow1/2
flip3--
rem-sqrt-square
div-inv
div-exp
div-sub
diff-log
frac-2neg
sub-neg
clear-num
cbrt-undiv
Counts
4 → 84
Calls
4 calls:
Slowest
15.0ms
(/ (- (* y.re x.im) (* y.im x.re)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
8.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
4.0ms
(- (* y.re x.im) (* y.im x.re))
4.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

series168.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
73.0ms
(/ (- (* y.re x.im) (* y.im x.re)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
45.0ms
(- (* y.re x.im) (* y.im x.re))
29.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
20.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

simplify2.3s

Counts
76 → 96
Calls
76 calls:
Slowest
285.0ms
(- (pow (* y.re x.im) 3) (pow (* y.im x.re) 3))
252.0ms
(- (* (* y.re x.im) (* y.re x.im)) (* (* y.im x.re) (* y.im x.re)))
223.0ms
(/ (* (* (- (* y.re x.im) (* y.im x.re)) (- (* y.re x.im) (* y.im x.re))) (- (* y.re x.im) (* y.im x.re))) (* (* (sqrt (+ (* y.re y.re) (* y.im y.im))) (sqrt (+ (* y.re y.re) (* y.im y.im)))) (sqrt (+ (* y.re y.re) (* y.im y.im)))))
180.0ms
(sqrt (+ (* (* y.re y.re) (* y.re y.re)) (- (* (* y.im y.im) (* y.im y.im)) (* (* y.re y.re) (* y.im y.im)))))
141.0ms
(sqrt (- (* (* y.re y.re) (* y.re y.re)) (* (* y.im y.im) (* y.im y.im))))

prune1.1s

Pruning

12 alts after pruning (12 fresh and 0 done)

Merged error: 22.9b

localize13.0ms

Local error

Found 4 expressions with local error:

28.2b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
28.2b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
16.6b
(/ (sqrt (+ (* y.re y.re) (* y.im y.im))) (- (* x.im y.re) (* x.re y.im)))
1.2b
(- (* x.im y.re) (* x.re y.im))

rewrite28.0ms

Algorithm
rewrite-expression-head
Rules
23×add-sqr-sqrt
21×add-cube-cbrt
21×*-un-lft-identity
18×sqrt-prod
18×times-frac
add-log-exp
associate-/l*
add-exp-log
sqrt-div
add-cbrt-cube
pow1
flip-+
flip3-+
associate-/r*
associate-/l/
flip--
associate-/r/
pow1/2
flip3--
rem-sqrt-square
div-inv
div-exp
diff-log
frac-2neg
sub-neg
clear-num
cbrt-undiv
Counts
4 → 83
Calls
4 calls:
Slowest
12.0ms
(/ (sqrt (+ (* y.re y.re) (* y.im y.im))) (- (* x.im y.re) (* x.re y.im)))
3.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
3.0ms
(- (* x.im y.re) (* x.re y.im))
3.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

series142.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
61.0ms
(/ (sqrt (+ (* y.re y.re) (* y.im y.im))) (- (* x.im y.re) (* x.re y.im)))
39.0ms
(- (* x.im y.re) (* x.re y.im))
23.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
19.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

simplify1.4s

Counts
75 → 95
Calls
75 calls:
Slowest
149.0ms
(/ (* (* (sqrt (+ (* y.re y.re) (* y.im y.im))) (sqrt (+ (* y.re y.re) (* y.im y.im)))) (sqrt (+ (* y.re y.re) (* y.im y.im)))) (* (* (- (* x.im y.re) (* x.re y.im)) (- (* x.im y.re) (* x.re y.im))) (- (* x.im y.re) (* x.re y.im))))
123.0ms
(sqrt (- (* (* y.re y.re) (* y.re y.re)) (* (* y.im y.im) (* y.im y.im))))
116.0ms
(sqrt (- (* (* y.re y.re) (* y.re y.re)) (* (* y.im y.im) (* y.im y.im))))
103.0ms
(+ (* (* x.im y.re) (* x.im y.re)) (+ (* (* x.re y.im) (* x.re y.im)) (* (* x.im y.re) (* x.re y.im))))
96.0ms
(sqrt (- (* (* y.re y.re) (* y.re y.re)) (* (* y.im y.im) (* y.im y.im))))

prune1.2s

Pruning

12 alts after pruning (11 fresh and 1 done)

Merged error: 22.9b

regimes417.0ms

Accuracy

5.5% (2.4b remaining)

Error of 25.5b against oracle of 23.1b and baseline of 25.7b

bsearch50.0ms

end0.0ms

sample1.9s

Algorithm
intervals
Results
8500×(pre true 80)
8500×(body real 80)