Average Error: 26.1 → 12.6
Time: 20.9s
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}\]
\[\begin{array}{l} \mathbf{if}\;y.im \le -8.298395431591579 \cdot 10^{+163}:\\ \;\;\;\;\frac{-x.im}{\sqrt{y.re^2 + y.im^2}^*}\\ \mathbf{elif}\;y.im \le 9.178635859760145 \cdot 10^{+148}:\\ \;\;\;\;\frac{\frac{1}{\frac{\sqrt{y.re^2 + y.im^2}^*}{(y.im \cdot x.im + \left(y.re \cdot x.re\right))_*}}}{\sqrt{y.re^2 + y.im^2}^*}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{\sqrt{y.re^2 + y.im^2}^*}\\ \end{array}\]

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Derivation

  1. Split input into 3 regimes
  2. if y.im < -8.298395431591579e+163

    1. Initial program 46.9

      \[\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-sqrt46.9

      \[\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-identity46.9

      \[\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-frac46.9

      \[\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. Simplified46.9

      \[\leadsto \color{blue}{\frac{1}{\sqrt{y.re^2 + y.im^2}^*}} \cdot \frac{x.re \cdot y.re + x.im \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    7. Simplified30.7

      \[\leadsto \frac{1}{\sqrt{y.re^2 + y.im^2}^*} \cdot \color{blue}{\frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{\sqrt{y.re^2 + y.im^2}^*}}\]
    8. Using strategy rm
    9. Applied associate-*l/30.6

      \[\leadsto \color{blue}{\frac{1 \cdot \frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{\sqrt{y.re^2 + y.im^2}^*}}{\sqrt{y.re^2 + y.im^2}^*}}\]
    10. Simplified30.6

      \[\leadsto \frac{\color{blue}{\frac{(y.im \cdot x.im + \left(y.re \cdot x.re\right))_*}{\sqrt{y.re^2 + y.im^2}^*}}}{\sqrt{y.re^2 + y.im^2}^*}\]
    11. Taylor expanded around -inf 13.7

      \[\leadsto \frac{\color{blue}{-1 \cdot x.im}}{\sqrt{y.re^2 + y.im^2}^*}\]
    12. Simplified13.7

      \[\leadsto \frac{\color{blue}{-x.im}}{\sqrt{y.re^2 + y.im^2}^*}\]

    if -8.298395431591579e+163 < y.im < 9.178635859760145e+148

    1. Initial program 19.3

      \[\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-sqrt19.3

      \[\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-identity19.3

      \[\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-frac19.3

      \[\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. Simplified19.3

      \[\leadsto \color{blue}{\frac{1}{\sqrt{y.re^2 + y.im^2}^*}} \cdot \frac{x.re \cdot y.re + x.im \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    7. Simplified12.4

      \[\leadsto \frac{1}{\sqrt{y.re^2 + y.im^2}^*} \cdot \color{blue}{\frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{\sqrt{y.re^2 + y.im^2}^*}}\]
    8. Using strategy rm
    9. Applied associate-*l/12.3

      \[\leadsto \color{blue}{\frac{1 \cdot \frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{\sqrt{y.re^2 + y.im^2}^*}}{\sqrt{y.re^2 + y.im^2}^*}}\]
    10. Simplified12.3

      \[\leadsto \frac{\color{blue}{\frac{(y.im \cdot x.im + \left(y.re \cdot x.re\right))_*}{\sqrt{y.re^2 + y.im^2}^*}}}{\sqrt{y.re^2 + y.im^2}^*}\]
    11. Using strategy rm
    12. Applied clear-num12.4

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{\sqrt{y.re^2 + y.im^2}^*}{(y.im \cdot x.im + \left(y.re \cdot x.re\right))_*}}}}{\sqrt{y.re^2 + y.im^2}^*}\]

    if 9.178635859760145e+148 < y.im

    1. Initial program 44.0

      \[\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-sqrt44.0

      \[\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-identity44.0

      \[\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-frac44.0

      \[\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. Simplified44.0

      \[\leadsto \color{blue}{\frac{1}{\sqrt{y.re^2 + y.im^2}^*}} \cdot \frac{x.re \cdot y.re + x.im \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    7. Simplified28.0

      \[\leadsto \frac{1}{\sqrt{y.re^2 + y.im^2}^*} \cdot \color{blue}{\frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{\sqrt{y.re^2 + y.im^2}^*}}\]
    8. Using strategy rm
    9. Applied associate-*l/27.9

      \[\leadsto \color{blue}{\frac{1 \cdot \frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{\sqrt{y.re^2 + y.im^2}^*}}{\sqrt{y.re^2 + y.im^2}^*}}\]
    10. Simplified27.9

      \[\leadsto \frac{\color{blue}{\frac{(y.im \cdot x.im + \left(y.re \cdot x.re\right))_*}{\sqrt{y.re^2 + y.im^2}^*}}}{\sqrt{y.re^2 + y.im^2}^*}\]
    11. Using strategy rm
    12. Applied clear-num28.0

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{\sqrt{y.re^2 + y.im^2}^*}{(y.im \cdot x.im + \left(y.re \cdot x.re\right))_*}}}}{\sqrt{y.re^2 + y.im^2}^*}\]
    13. Taylor expanded around 0 12.9

      \[\leadsto \frac{\color{blue}{x.im}}{\sqrt{y.re^2 + y.im^2}^*}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification12.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.im \le -8.298395431591579 \cdot 10^{+163}:\\ \;\;\;\;\frac{-x.im}{\sqrt{y.re^2 + y.im^2}^*}\\ \mathbf{elif}\;y.im \le 9.178635859760145 \cdot 10^{+148}:\\ \;\;\;\;\frac{\frac{1}{\frac{\sqrt{y.re^2 + y.im^2}^*}{(y.im \cdot x.im + \left(y.re \cdot x.re\right))_*}}}{\sqrt{y.re^2 + y.im^2}^*}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{\sqrt{y.re^2 + y.im^2}^*}\\ \end{array}\]

Reproduce

herbie shell --seed 2018360 +o rules:numerics
(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: 17.5s)Debug log

start69.0ms

Algorithm
intervals

setup24.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 25.5b

localize47.0ms

Local error

Found 3 expressions with local error:

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

rewrite31.0ms

Algorithm
rewrite-expression-head
Counts
3 → 61
Calls

3 calls. Slowest were:

22.0ms
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im)))
4.0ms
(+ (* y.re y.re) (* y.im y.im))
4.0ms
(+ (* x.re y.re) (* x.im y.im))

series152.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

87.0ms
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im)))
46.0ms
(+ (* x.re y.re) (* x.im y.im))
19.0ms
(+ (* y.re y.re) (* y.im y.im))

simplify1.5s

Counts
40 → 70
Calls

40 calls. Slowest were:

569.0ms
(- (* (* x.re y.re) (* x.re y.re)) (* (* x.im y.im) (* x.im y.im)))
276.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))))
162.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))))

prune811.0ms

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 16.3b

localize14.0ms

Local error

Found 4 expressions with local error:

16.0b
(/ (fma x.re y.re (* x.im y.im)) (hypot y.re y.im))
0.3b
(* (/ 1 (hypot y.re y.im)) (/ (fma x.re y.re (* x.im y.im)) (hypot y.re y.im)))
0.2b
(fma x.re y.re (* x.im y.im))
0.0b
(/ 1 (hypot y.re y.im))

rewrite11.0ms

Algorithm
rewrite-expression-head
Counts
4 → 94
Calls

4 calls. Slowest were:

5.0ms
(* (/ 1 (hypot y.re y.im)) (/ (fma x.re y.re (* x.im y.im)) (hypot y.re y.im)))
3.0ms
(/ (fma x.re y.re (* x.im y.im)) (hypot y.re y.im))
1.0ms
(/ 1 (hypot y.re y.im))

series293.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

107.0ms
(/ (fma x.re y.re (* x.im y.im)) (hypot y.re y.im))
105.0ms
(* (/ 1 (hypot y.re y.im)) (/ (fma x.re y.re (* x.im y.im)) (hypot y.re y.im)))
44.0ms
(/ 1 (hypot y.re y.im))
37.0ms
(fma x.re y.re (* x.im y.im))

simplify1.7s

Counts
67 → 106
Calls

67 calls. Slowest were:

392.0ms
(* (* (* (/ 1 (hypot y.re y.im)) (/ 1 (hypot y.re y.im))) (/ 1 (hypot y.re y.im))) (* (* (/ (fma x.re y.re (* x.im y.im)) (hypot y.re y.im)) (/ (fma x.re y.re (* x.im y.im)) (hypot y.re y.im))) (/ (fma x.re y.re (* x.im y.im)) (hypot y.re y.im))))
249.0ms
(* (/ 1 (hypot y.re y.im)) (/ (fma x.re y.re (* x.im y.im)) (hypot y.re y.im)))
204.0ms
(/ (* (* (fma x.re y.re (* x.im y.im)) (fma x.re y.re (* x.im y.im))) (fma x.re y.re (* x.im y.im))) (* (* (hypot y.re y.im) (hypot y.re y.im)) (hypot y.re y.im)))

prune1.5s

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 6.8b

localize23.0ms

Local error

Found 3 expressions with local error:

16.0b
(/ (fma y.im x.im (* y.re x.re)) (hypot y.re y.im))
0.3b
(fma y.im x.im (* y.re x.re))
0.1b
(/ (/ (fma y.im x.im (* y.re x.re)) (hypot y.re y.im)) (hypot y.re y.im))

rewrite23.0ms

Algorithm
rewrite-expression-head
Counts
3 → 111
Calls

3 calls. Slowest were:

12.0ms
(/ (/ (fma y.im x.im (* y.re x.re)) (hypot y.re y.im)) (hypot y.re y.im))
7.0ms
(/ (fma y.im x.im (* y.re x.re)) (hypot y.re y.im))
0.0ms
(fma y.im x.im (* y.re x.re))

series258.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

115.0ms
(/ (fma y.im x.im (* y.re x.re)) (hypot y.re y.im))
101.0ms
(/ (/ (fma y.im x.im (* y.re x.re)) (hypot y.re y.im)) (hypot y.re y.im))
42.0ms
(fma y.im x.im (* y.re x.re))

simplify2.8s

Counts
132 → 120
Calls

132 calls. Slowest were:

368.0ms
(/ (/ (* (* (fma y.im x.im (* y.re x.re)) (fma y.im x.im (* y.re x.re))) (fma y.im x.im (* y.re x.re))) (* (* (hypot y.re y.im) (hypot y.re y.im)) (hypot y.re y.im))) (* (* (hypot y.re y.im) (hypot y.re y.im)) (hypot y.re y.im)))
220.0ms
(/ (* (* (/ (fma y.im x.im (* y.re x.re)) (hypot y.re y.im)) (/ (fma y.im x.im (* y.re x.re)) (hypot y.re y.im))) (/ (fma y.im x.im (* y.re x.re)) (hypot y.re y.im))) (* (* (hypot y.re y.im) (hypot y.re y.im)) (hypot y.re y.im)))
183.0ms
(/ (* (* (fma y.im x.im (* y.re x.re)) (fma y.im x.im (* y.re x.re))) (fma y.im x.im (* y.re x.re))) (* (* (hypot y.re y.im) (hypot y.re y.im)) (hypot y.re y.im)))

prune1.5s

Pruning

9 alts after pruning (9 fresh and 0 done)

Merged error: 2.2b

localize19.0ms

Local error

Found 4 expressions with local error:

16.1b
(/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re)))
0.3b
(fma y.im x.im (* y.re x.re))
0.2b
(/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re))))
0.1b
(/ (/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re)))) (hypot y.re y.im))

rewrite12.0ms

Algorithm
rewrite-expression-head
Counts
4 → 109
Calls

4 calls. Slowest were:

5.0ms
(/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re)))
4.0ms
(/ (/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re)))) (hypot y.re y.im))
2.0ms
(/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re))))

series382.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

138.0ms
(/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re))))
133.0ms
(/ (/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re)))) (hypot y.re y.im))
73.0ms
(/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re)))
38.0ms
(fma y.im x.im (* y.re x.re))

simplify4.3s

Counts
92 → 121
Calls

92 calls. Slowest were:

725.0ms
(/ (* (* (/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re)))) (/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re))))) (/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re))))) (* (* (hypot y.re y.im) (hypot y.re y.im)) (hypot y.re y.im)))
230.0ms
(/ (/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re)))) (cbrt (hypot y.re y.im)))
216.0ms
(/ (/ 1 (/ (hypot y.re y.im) (fma y.im x.im (* y.re x.re)))) (sqrt (hypot y.re y.im)))

prune1.5s

Pruning

10 alts after pruning (9 fresh and 1 done)

Merged error: 2.2b

regimes412.0ms

Accuracy

29.2% (10.1b remaining)

Error of 12.6b against oracle of 2.5b and baseline of 16.8b

bsearch177.0ms