Average Error: 25.5 → 25.5
Time: 29.5s
Precision: 64
Internal Precision: 128
\[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]

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. Initial program 25.5

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

    \[\leadsto \frac{x.re \cdot y.re + x.im \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 *-un-lft-identity25.5

    \[\leadsto \frac{\color{blue}{1 \cdot \left(x.re \cdot y.re + x.im \cdot y.im\right)}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  5. Applied times-frac25.5

    \[\leadsto \color{blue}{\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.re \cdot y.re + x.im \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
  6. Final simplification25.5

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

Reproduce

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

Details

Time bar (total: 28.1s)Debug log

sample32.0ms

Algorithm
intervals

simplify8.0ms

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

prune12.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 25.4b

localize40.0ms

Local error

Found 3 expressions with local error:

25.3b
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im)))
0.0b
(+ (* y.re y.re) (* y.im y.im))
0.0b
(+ (* x.re y.re) (* x.im y.im))

rewrite47.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
flip-+
flip3-+
associate-/l*
associate-/r*
pow1
associate-/l/
associate-/r/
sum-log
+-commutative
div-inv
div-exp
frac-2neg
clear-num
cbrt-undiv
Counts
3 → 53
Calls
3 calls:
Slowest
36.0ms
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im)))
5.0ms
(+ (* x.re y.re) (* x.im y.im))
4.0ms
(+ (* y.re y.re) (* y.im y.im))

series135.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
80.0ms
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im)))
40.0ms
(+ (* x.re y.re) (* x.im y.im))
15.0ms
(+ (* y.re y.re) (* y.im y.im))

simplify1.0s

Counts
40 → 62
Calls
40 calls:
Slowest
253.0ms
(- (* (* x.re y.re) (* x.re y.re)) (* (* x.im y.im) (* x.im y.im)))
159.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))))
157.0ms
(/ (* (* (+ (* x.re y.re) (* x.im y.im)) (+ (* x.re y.re) (* x.im y.im))) (+ (* x.re y.re) (* x.im 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))))
145.0ms
(+ (pow (* x.re y.re) 3) (pow (* x.im y.im) 3))
44.0ms
(/ (* (cbrt (+ (* x.re y.re) (* x.im y.im))) (cbrt (+ (* x.re y.re) (* x.im y.im)))) (* (cbrt (+ (* y.re y.re) (* y.im y.im))) (cbrt (+ (* y.re y.re) (* y.im y.im)))))

prune678.0ms

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 24.9b

localize27.0ms

Local error

Found 4 expressions with local error:

31.8b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
31.8b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
15.8b
(/ (+ (* x.re y.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
0.2b
(* (/ 1 (sqrt (+ (* y.re y.re) (* y.im y.im)))) (/ (+ (* x.re y.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im)))))

rewrite27.0ms

Algorithm
rewrite-expression-head
Rules
37×add-sqr-sqrt
36×times-frac
35×add-cube-cbrt
35×*-un-lft-identity
27×sqrt-prod
24×associate-*r*
16×add-exp-log
11×add-cbrt-cube
10×sqrt-div
flip-+
associate-/r/
associate-*l*
flip3-+
associate-/r*
pow1
add-log-exp
prod-exp
associate-/l*
div-inv
div-exp
associate-/l/
cbrt-unprod
pow1/2
rec-exp
rem-sqrt-square
cbrt-undiv
*-commutative
associate-*r/
associate-*l/
pow-prod-down
frac-2neg
clear-num
frac-times
Counts
4 → 119
Calls
4 calls:
Slowest
9.0ms
(/ (+ (* x.re y.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
9.0ms
(* (/ 1 (sqrt (+ (* y.re y.re) (* y.im y.im)))) (/ (+ (* x.re y.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im)))))
4.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
3.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

series260.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
128.0ms
(* (/ 1 (sqrt (+ (* y.re y.re) (* y.im y.im)))) (/ (+ (* x.re y.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im)))))
93.0ms
(/ (+ (* x.re y.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
20.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
18.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

simplify3.6s

Counts
113 → 131
Calls
113 calls:
Slowest
543.0ms
(* (* (* (/ 1 (sqrt (+ (* y.re y.re) (* y.im y.im)))) (/ 1 (sqrt (+ (* y.re y.re) (* y.im y.im))))) (/ 1 (sqrt (+ (* y.re y.re) (* y.im y.im))))) (* (* (/ (+ (* x.re y.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im)))) (/ (+ (* x.re y.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))) (/ (+ (* x.re y.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))))
301.0ms
(* (/ 1 (sqrt (+ (* y.re y.re) (* y.im y.im)))) (/ (+ (* x.re y.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im)))))
256.0ms
(- (* (* x.re y.re) (* x.re y.re)) (* (* x.im y.im) (* x.im y.im)))
194.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)))))
189.0ms
(* (* (* (/ 1 (sqrt (+ (* y.re y.re) (* y.im y.im)))) (/ 1 (sqrt (+ (* y.re y.re) (* y.im y.im))))) (/ 1 (sqrt (+ (* y.re y.re) (* y.im y.im))))) (/ (* (* (+ (* x.re y.re) (* x.im y.im)) (+ (* x.re y.re) (* x.im y.im))) (+ (* x.re y.re) (* x.im 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))))))

prune1.5s

Pruning

12 alts after pruning (11 fresh and 1 done)

Merged error: 23.3b

localize14.0ms

Local error

Found 4 expressions with local error:

31.8b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
31.8b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
15.8b
(/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
0.1b
(/ (/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im)))) (sqrt (+ (* y.re y.re) (* y.im y.im))))

rewrite33.0ms

Algorithm
rewrite-expression-head
Rules
288×times-frac
164×add-sqr-sqrt
162×add-cube-cbrt
162×*-un-lft-identity
156×sqrt-prod
27×associate-/l*
22×sqrt-div
18×associate-/r/
12×flip-+
12×flip3-+
12×associate-/r*
11×add-exp-log
11×add-cbrt-cube
div-inv
add-log-exp
div-exp
cbrt-undiv
pow1
associate-/l/
pow1/2
frac-2neg
clear-num
rem-sqrt-square
Counts
4 → 262
Calls
4 calls:
Slowest
15.0ms
(/ (/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im)))) (sqrt (+ (* y.re y.re) (* y.im y.im))))
10.0ms
(/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
2.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
2.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

series134.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
56.0ms
(/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
41.0ms
(/ (/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im)))) (sqrt (+ (* y.re y.re) (* y.im y.im))))
19.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
18.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

simplify11.2s

Counts
398 → 274
Calls
398 calls:
Slowest
483.0ms
(/ (/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (- (* (* y.re y.re) (* y.re y.re)) (* (* y.im y.im) (* y.im y.im))))) (sqrt (* (cbrt (+ (* y.re y.re) (* y.im y.im))) (cbrt (+ (* y.re y.re) (* y.im y.im))))))
242.0ms
(/ (* (* (/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im)))) (/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))) (/ (+ (* y.re x.re) (* x.im 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)))) (sqrt (+ (* y.re y.re) (* y.im y.im)))))
233.0ms
(/ (/ (* (cbrt (+ (* y.re x.re) (* x.im y.im))) (cbrt (+ (* y.re x.re) (* x.im y.im)))) (* (cbrt (sqrt (+ (* y.re y.re) (* y.im y.im)))) (cbrt (sqrt (+ (* y.re y.re) (* y.im y.im)))))) 1)
206.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))))) (sqrt (+ (* y.re y.re) (* y.im y.im))))
205.0ms
(- (* (* y.re x.re) (* y.re x.re)) (* (* x.im y.im) (* x.im y.im)))

prune3.9s

Pruning

11 alts after pruning (10 fresh and 1 done)

Merged error: 23.3b

localize18.0ms

Local error

Found 4 expressions with local error:

31.8b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
31.8b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
31.8b
(sqrt (+ (* y.re y.re) (* y.im y.im)))
15.8b
(/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))

rewrite31.0ms

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

series187.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
92.0ms
(/ (+ (* y.re x.re) (* x.im y.im)) (sqrt (+ (* y.re y.re) (* y.im y.im))))
33.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
32.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))
30.0ms
(sqrt (+ (* y.re y.re) (* y.im y.im)))

simplify1.6s

Counts
80 → 97
Calls
80 calls:
Slowest
217.0ms
(- (* (* y.re x.re) (* y.re x.re)) (* (* x.im y.im) (* x.im y.im)))
152.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)))))
130.0ms
(sqrt (- (* (* y.re y.re) (* y.re y.re)) (* (* y.im y.im) (* y.im y.im))))
127.0ms
(sqrt (- (* (* y.re y.re) (* y.re y.re)) (* (* y.im y.im) (* y.im y.im))))
117.0ms
(+ (pow (* y.re x.re) 3) (pow (* x.im y.im) 3))

prune1.6s

Pruning

12 alts after pruning (10 fresh and 2 done)

Merged error: 23.3b

regimes386.0ms

Accuracy

0% (2.6b remaining)

Error of 25.5b against oracle of 22.9b and baseline of 25.5b

bsearch2.0ms

end0.0ms

sample1.7s

Algorithm
intervals