Average Error: 25.5 → 13.1
Time: 16.7s
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 -4.0745539003521706 \cdot 10^{+83}:\\ \;\;\;\;\frac{-x.im}{\sqrt{y.im^2 + y.re^2}^*}\\ \mathbf{elif}\;y.im \le 1.4791269730391837 \cdot 10^{+143}:\\ \;\;\;\;\frac{(y.im \cdot x.im + \left(x.re \cdot y.re\right))_* \cdot \frac{1}{\sqrt{y.im^2 + y.re^2}^*}}{\sqrt{y.im^2 + y.re^2}^*}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{\sqrt{y.im^2 + y.re^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 < -4.0745539003521706e+83

    1. Initial program 37.0

      \[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    2. Simplified37.0

      \[\leadsto \color{blue}{\frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*}}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt37.0

      \[\leadsto \frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{\color{blue}{\sqrt{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*} \cdot \sqrt{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*}}}\]
    5. Applied *-un-lft-identity37.0

      \[\leadsto \frac{\color{blue}{1 \cdot (x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}}{\sqrt{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*} \cdot \sqrt{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*}}\]
    6. Applied times-frac37.0

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

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

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

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

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

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

    if -4.0745539003521706e+83 < y.im < 1.4791269730391837e+143

    1. Initial program 18.5

      \[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    2. Simplified18.5

      \[\leadsto \color{blue}{\frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*}}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt18.5

      \[\leadsto \frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{\color{blue}{\sqrt{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*} \cdot \sqrt{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*}}}\]
    5. Applied *-un-lft-identity18.5

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

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

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

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

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

    if 1.4791269730391837e+143 < y.im

    1. Initial program 43.1

      \[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    2. Simplified43.1

      \[\leadsto \color{blue}{\frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*}}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt43.1

      \[\leadsto \frac{(x.re \cdot y.re + \left(x.im \cdot y.im\right))_*}{\color{blue}{\sqrt{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*} \cdot \sqrt{(y.im \cdot y.im + \left(y.re \cdot y.re\right))_*}}}\]
    5. Applied *-un-lft-identity43.1

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

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

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

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

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

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

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

Reproduce

herbie shell --seed 2019010 +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: 15.5s)Debug log

sample47.0ms

Algorithm
intervals

simplify38.0ms

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

prune23.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 25.3b

localize21.0ms

Local error

Found 2 expressions with local error:

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

rewrite5.0ms

Algorithm
rewrite-expression-head
Rules
10×add-cube-cbrt
10×*-un-lft-identity
10×add-sqr-sqrt
times-frac
add-exp-log
add-cbrt-cube
associate-/l*
associate-/r*
add-log-exp
log1p-expm1-u
pow1
expm1-log1p-u
div-inv
fma-udef
div-exp
frac-2neg
clear-num
cbrt-undiv
Counts
2 → 39
Calls
2 calls:
Slowest
4.0ms
(/ (fma x.re y.re (* x.im y.im)) (fma y.im y.im (* y.re y.re)))
0.0ms
(fma y.im y.im (* y.re y.re))

series94.0ms

Counts
2 → 6
Calls
2 calls:
Slowest
64.0ms
(/ (fma x.re y.re (* x.im y.im)) (fma y.im y.im (* y.re y.re)))
30.0ms
(fma y.im y.im (* y.re y.re))

simplify597.0ms

Counts
31 → 45
Calls
31 calls:
Slowest
206.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))) (* (* (fma y.im y.im (* y.re y.re)) (fma y.im y.im (* y.re y.re))) (fma y.im y.im (* y.re y.re))))
50.0ms
(/ (* (cbrt (fma x.re y.re (* x.im y.im))) (cbrt (fma x.re y.re (* x.im y.im)))) (* (cbrt (fma y.im y.im (* y.re y.re))) (cbrt (fma y.im y.im (* y.re y.re)))))
26.0ms
(/ (* (cbrt (fma x.re y.re (* x.im y.im))) (cbrt (fma x.re y.re (* x.im y.im)))) (sqrt (fma y.im y.im (* y.re y.re))))
21.0ms
(/ (sqrt (fma x.re y.re (* x.im y.im))) (cbrt (fma y.im y.im (* y.re y.re))))
20.0ms
(/ (cbrt (fma x.re y.re (* x.im y.im))) (cbrt (fma y.im y.im (* y.re y.re))))

prune588.0ms

Pruning

10 alts after pruning (9 fresh and 1 done)

Merged error: 16.0b

localize19.0ms

Local error

Found 4 expressions with local error:

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

rewrite17.0ms

Algorithm
rewrite-expression-head
Rules
21×add-cube-cbrt
21×*-un-lft-identity
21×add-sqr-sqrt
18×times-frac
17×add-exp-log
13×associate-*r*
11×add-cbrt-cube
pow1
associate-/r*
add-log-exp
div-inv
log1p-expm1-u
prod-exp
associate-*l*
expm1-log1p-u
associate-/l*
div-exp
rec-exp
cbrt-unprod
frac-2neg
clear-num
cbrt-undiv
inv-pow
pow-flip
fma-udef
*-commutative
associate-*r/
associate-*l/
pow-prod-down
frac-times
Counts
4 → 94
Calls
4 calls:
Slowest
12.0ms
(* (/ 1 (hypot y.im y.re)) (/ (fma y.im x.im (* x.re y.re)) (hypot y.im y.re)))
3.0ms
(/ (fma y.im x.im (* x.re y.re)) (hypot y.im y.re))
1.0ms
(/ 1 (hypot y.im y.re))
0.0ms
(fma y.im x.im (* x.re y.re))

series319.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
159.0ms
(* (/ 1 (hypot y.im y.re)) (/ (fma y.im x.im (* x.re y.re)) (hypot y.im y.re)))
74.0ms
(/ (fma y.im x.im (* x.re y.re)) (hypot y.im y.re))
44.0ms
(fma y.im x.im (* x.re y.re))
42.0ms
(/ 1 (hypot y.im y.re))

simplify1.9s

Counts
67 → 106
Calls
67 calls:
Slowest
542.0ms
(* (* (* (/ 1 (hypot y.im y.re)) (/ 1 (hypot y.im y.re))) (/ 1 (hypot y.im y.re))) (* (* (/ (fma y.im x.im (* x.re y.re)) (hypot y.im y.re)) (/ (fma y.im x.im (* x.re y.re)) (hypot y.im y.re))) (/ (fma y.im x.im (* x.re y.re)) (hypot y.im y.re))))
278.0ms
(* (/ 1 (hypot y.im y.re)) (/ (fma y.im x.im (* x.re y.re)) (hypot y.im y.re)))
170.0ms
(/ (* (* (fma y.im x.im (* x.re y.re)) (fma y.im x.im (* x.re y.re))) (fma y.im x.im (* x.re y.re))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re)))
112.0ms
(* (* (* (/ 1 (hypot y.im y.re)) (/ 1 (hypot y.im y.re))) (/ 1 (hypot y.im y.re))) (/ (* (* (fma y.im x.im (* x.re y.re)) (fma y.im x.im (* x.re y.re))) (fma y.im x.im (* x.re y.re))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re))))
110.0ms
(+ (log (/ 1 (hypot y.im y.re))) (- (log (fma y.im x.im (* x.re y.re))) (log (hypot y.im y.re))))

prune1.3s

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 6.3b

localize15.0ms

Local error

Found 4 expressions with local error:

15.8b
(/ (fma y.re x.re (* x.im y.im)) (hypot y.im y.re))
0.1b
(/ (/ (fma y.re x.re (* x.im y.im)) (hypot y.im y.re)) (hypot y.im y.re))
0.0b
(hypot y.im y.re)
0.0b
(hypot y.im y.re)

rewrite14.0ms

Algorithm
rewrite-expression-head
Rules
84×times-frac
54×add-cube-cbrt
54×*-un-lft-identity
54×add-sqr-sqrt
16×associate-/l*
11×add-exp-log
11×add-cbrt-cube
div-inv
associate-/r*
add-log-exp
log1p-expm1-u
div-exp
cbrt-undiv
pow1
expm1-log1p-u
frac-2neg
clear-num
hypot-udef
associate-/l/
Counts
4 → 121
Calls
4 calls:
Slowest
8.0ms
(/ (/ (fma y.re x.re (* x.im y.im)) (hypot y.im y.re)) (hypot y.im y.re))
3.0ms
(/ (fma y.re x.re (* x.im y.im)) (hypot y.im y.re))
0.0ms
(hypot y.im y.re)
0.0ms
(hypot y.im y.re)

series264.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
113.0ms
(/ (/ (fma y.re x.re (* x.im y.im)) (hypot y.im y.re)) (hypot y.im y.re))
87.0ms
(/ (fma y.re x.re (* x.im y.im)) (hypot y.im y.re))
40.0ms
(hypot y.im y.re)
24.0ms
(hypot y.im y.re)

simplify3.0s

Counts
135 → 133
Calls
135 calls:
Slowest
349.0ms
(/ (/ (* (* (fma y.re x.re (* x.im y.im)) (fma y.re x.re (* x.im y.im))) (fma y.re x.re (* x.im y.im))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re)))
265.0ms
(/ (* (* (/ (fma y.re x.re (* x.im y.im)) (hypot y.im y.re)) (/ (fma y.re x.re (* x.im y.im)) (hypot y.im y.re))) (/ (fma y.re x.re (* x.im y.im)) (hypot y.im y.re))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re)))
230.0ms
(/ (/ (* (cbrt (fma y.re x.re (* x.im y.im))) (cbrt (fma y.re x.re (* x.im y.im)))) (* (cbrt (hypot y.im y.re)) (cbrt (hypot y.im y.re)))) 1)
197.0ms
(/ (* (* (fma y.re x.re (* x.im y.im)) (fma y.re x.re (* x.im y.im))) (fma y.re x.re (* x.im y.im))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re)))
128.0ms
(/ (/ (* (cbrt (fma y.re x.re (* x.im y.im))) (cbrt (fma y.re x.re (* x.im y.im)))) 1) (* (cbrt (hypot y.im y.re)) (cbrt (hypot y.im y.re))))

prune1.4s

Pruning

9 alts after pruning (9 fresh and 0 done)

Merged error: 2.4b

localize11.0ms

Local error

Found 4 expressions with local error:

15.9b
(* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re)))
0.1b
(/ (* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re))) (hypot y.im y.re))
0.0b
(/ 1 (hypot y.im y.re))
0.0b
(fma y.im x.im (* x.re y.re))

rewrite28.0ms

Algorithm
rewrite-expression-head
Rules
17×add-exp-log
11×add-cbrt-cube
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
pow1
associate-/r*
add-log-exp
log1p-expm1-u
prod-exp
associate-*l*
expm1-log1p-u
div-inv
fma-udef
associate-*r*
div-exp
times-frac
rec-exp
cbrt-unprod
associate-*l/
frac-2neg
clear-num
cbrt-undiv
associate-/l/
inv-pow
associate-/l*
pow-flip
*-commutative
pow-prod-down
distribute-lft-in
distribute-rgt-in
Counts
4 → 77
Calls
4 calls:
Slowest
15.0ms
(/ (* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re))) (hypot y.im y.re))
10.0ms
(* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re)))
1.0ms
(/ 1 (hypot y.im y.re))
0.0ms
(fma y.im x.im (* x.re y.re))

series344.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
147.0ms
(/ (* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re))) (hypot y.im y.re))
120.0ms
(* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re)))
42.0ms
(/ 1 (hypot y.im y.re))
35.0ms
(fma y.im x.im (* x.re y.re))

simplify1.9s

Counts
44 → 89
Calls
44 calls:
Slowest
689.0ms
(* (* (* (/ 1 (hypot y.im y.re)) (/ 1 (hypot y.im y.re))) (/ 1 (hypot y.im y.re))) (* (* (fma y.im x.im (* x.re y.re)) (fma y.im x.im (* x.re y.re))) (fma y.im x.im (* x.re y.re))))
226.0ms
(- (log (* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re)))) (log (hypot y.im y.re)))
211.0ms
(/ (* (* (* (/ 1 (hypot y.im y.re)) (/ 1 (hypot y.im y.re))) (/ 1 (hypot y.im y.re))) (* (* (fma y.im x.im (* x.re y.re)) (fma y.im x.im (* x.re y.re))) (fma y.im x.im (* x.re y.re)))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re)))
166.0ms
(/ (* (* (* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re))) (* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re)))) (* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re)))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re)))
148.0ms
(* (/ 1 (hypot y.im y.re)) (fma y.im x.im (* x.re y.re)))

prune946.0ms

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 2.4b

regimes383.0ms

Accuracy

21.6% (10.9b remaining)

Error of 13.1b against oracle of 2.2b and baseline of 16.1b

bsearch129.0ms

end0.0ms

sample2.0s

Algorithm
intervals