Average Error: 26.1 → 7.1
Time: 26.2s
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.re \le -1.8988337831022309 \cdot 10^{+177}:\\ \;\;\;\;\frac{-x.im}{\sqrt{y.im^2 + y.re^2}^*}\\ \mathbf{elif}\;y.re \le 2.599647374459235 \cdot 10^{+114}:\\ \;\;\;\;\frac{\frac{-x.re}{\sqrt{y.im^2 + y.re^2}^*} \cdot y.im + \frac{1}{\sqrt{y.im^2 + y.re^2}^*} \cdot \left(x.im \cdot y.re\right)}{\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

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 3 regimes
  2. if y.re < -1.8988337831022309e+177

    1. Initial program 43.4

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

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

      \[\leadsto \frac{x.im \cdot y.re - x.re \cdot y.im}{\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.4

      \[\leadsto \frac{\color{blue}{1 \cdot \left(x.im \cdot y.re - x.re \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.4

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

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

      \[\leadsto \frac{1}{\sqrt{y.im^2 + y.re^2}^*} \cdot \color{blue}{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.im^2 + y.re^2}^*}}\]
    9. Using strategy rm
    10. Applied associate-*l/29.8

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

      \[\leadsto \frac{\color{blue}{\frac{y.re \cdot x.im - x.re \cdot y.im}{\sqrt{y.im^2 + y.re^2}^*}}}{\sqrt{y.im^2 + y.re^2}^*}\]
    12. Taylor expanded around -inf 11.7

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

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

    if -1.8988337831022309e+177 < y.re < 2.599647374459235e+114

    1. Initial program 19.6

      \[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    2. Simplified19.6

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

      \[\leadsto \frac{x.im \cdot y.re - x.re \cdot y.im}{\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-identity19.6

      \[\leadsto \frac{\color{blue}{1 \cdot \left(x.im \cdot y.re - x.re \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-frac19.6

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

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

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

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

      \[\leadsto \frac{\frac{1}{\sqrt{y.im^2 + y.re^2}^*} \cdot \color{blue}{\left(x.im \cdot y.re + \left(-x.re \cdot y.im\right)\right)}}{\sqrt{y.im^2 + y.re^2}^*}\]
    13. Applied distribute-lft-in12.1

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

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

    if 2.599647374459235e+114 < y.re

    1. Initial program 41.9

      \[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    2. Simplified41.9

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

      \[\leadsto \frac{x.im \cdot y.re - x.re \cdot y.im}{\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-identity41.9

      \[\leadsto \frac{\color{blue}{1 \cdot \left(x.im \cdot y.re - x.re \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-frac41.9

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

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

      \[\leadsto \frac{1}{\sqrt{y.im^2 + y.re^2}^*} \cdot \color{blue}{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.im^2 + y.re^2}^*}}\]
    9. Using strategy rm
    10. Applied associate-*l/27.0

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

      \[\leadsto \frac{\color{blue}{\frac{y.re \cdot x.im - x.re \cdot y.im}{\sqrt{y.im^2 + y.re^2}^*}}}{\sqrt{y.im^2 + y.re^2}^*}\]
    12. Taylor expanded around inf 16.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.re \le -1.8988337831022309 \cdot 10^{+177}:\\ \;\;\;\;\frac{-x.im}{\sqrt{y.im^2 + y.re^2}^*}\\ \mathbf{elif}\;y.re \le 2.599647374459235 \cdot 10^{+114}:\\ \;\;\;\;\frac{\frac{-x.re}{\sqrt{y.im^2 + y.re^2}^*} \cdot y.im + \frac{1}{\sqrt{y.im^2 + y.re^2}^*} \cdot \left(x.im \cdot y.re\right)}{\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 2019022 +o rules:numerics
(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: 25.1s)Debug log

sample42.0ms

Algorithm
intervals
Results
31.0ms267×body80valid

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)))

prune9.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 28.1b

localize35.0ms

Local error

Found 3 expressions with local error:

28.1b
(/ (- (* x.im y.re) (* x.re y.im)) (fma y.im y.im (* y.re y.re)))
0.2b
(- (* x.im y.re) (* x.re y.im))
0.0b
(fma y.im y.im (* y.re y.re))

rewrite22.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*
log1p-expm1-u
associate-/r*
pow1
expm1-log1p-u
associate-/l/
flip--
flip3--
div-inv
fma-udef
prod-diff
div-exp
div-sub
diff-log
fma-neg
frac-2neg
sub-neg
clear-num
cbrt-undiv
Counts
3 → 58
Calls
3 calls:
Slowest
16.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (fma y.im y.im (* y.re y.re)))
4.0ms
(- (* x.im y.re) (* x.re y.im))
0.0ms
(fma y.im y.im (* y.re y.re))

series116.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
72.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (fma y.im y.im (* y.re y.re)))
26.0ms
(- (* x.im y.re) (* x.re y.im))
19.0ms
(fma y.im y.im (* y.re y.re))

simplify1.6s

Counts
40 → 67
Calls
40 calls:
Slowest
524.0ms
(- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.re y.im)))
273.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))) (* (* (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))))
227.0ms
(- (pow (* x.im y.re) 3) (pow (* x.re y.im) 3))
54.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (fma y.im y.im (* y.re y.re)))
47.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (sqrt (fma y.im y.im (* y.re y.re))))

prune682.0ms

Pruning

9 alts after pruning (9 fresh and 0 done)

Merged error: 16.8b

localize22.0ms

Local error

Found 4 expressions with local error:

16.5b
(/ (- (* x.im y.re) (* x.re y.im)) (hypot y.im y.re))
0.3b
(* (/ 1 (hypot y.im y.re)) (/ (- (* x.im y.re) (* x.re y.im)) (hypot y.im y.re)))
0.2b
(- (* x.im y.re) (* x.re y.im))
0.0b
(hypot y.im y.re)

rewrite28.0ms

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

series630.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
458.0ms
(* (/ 1 (hypot y.im y.re)) (/ (- (* x.im y.re) (* x.re y.im)) (hypot y.im y.re)))
106.0ms
(/ (- (* x.im y.re) (* x.re y.im)) (hypot y.im y.re))
38.0ms
(hypot y.im y.re)
29.0ms
(- (* x.im y.re) (* x.re y.im))

simplify2.9s

Counts
69 → 107
Calls
69 calls:
Slowest
529.0ms
(- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.re y.im)))
303.0ms
(* 1 (/ (- (* x.im y.re) (* x.re y.im)) (hypot y.im y.re)))
233.0ms
(- (pow (* x.im y.re) 3) (pow (* x.re y.im) 3))
180.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))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re)))
141.0ms
(* (* (* (/ 1 (hypot y.im y.re)) (/ 1 (hypot y.im y.re))) (/ 1 (hypot y.im y.re))) (/ (* (* (- (* x.im y.re) (* x.re y.im)) (- (* x.im y.re) (* x.re y.im))) (- (* x.im y.re) (* x.re y.im))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re))))

prune1.2s

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 4.5b

localize12.0ms

Local error

Found 4 expressions with local error:

16.5b
(/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re))
0.2b
(- (* y.re x.im) (* x.re y.im))
0.1b
(/ (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re)) (hypot y.im y.re))
0.0b
(hypot y.im y.re)

rewrite17.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
add-log-exp
div-inv
associate-/r*
log1p-expm1-u
div-exp
cbrt-undiv
pow1
expm1-log1p-u
associate-/l/
div-sub
flip--
flip3--
frac-2neg
clear-num
prod-diff
diff-log
fma-neg
sub-neg
hypot-udef
Counts
4 → 131
Calls
4 calls:
Slowest
7.0ms
(/ (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re)) (hypot y.im y.re))
6.0ms
(/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re))
2.0ms
(- (* y.re x.im) (* x.re y.im))
0.0ms
(hypot y.im y.re)

series245.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
108.0ms
(/ (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re)) (hypot y.im y.re))
72.0ms
(/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re))
42.0ms
(- (* y.re x.im) (* x.re y.im))
24.0ms
(hypot y.im y.re)

simplify7.3s

Counts
142 → 143
Calls
142 calls:
Slowest
576.0ms
(- (* (* y.re x.im) (* y.re x.im)) (* (* x.re y.im) (* x.re y.im)))
504.0ms
(/ (/ (* (* (- (* y.re x.im) (* x.re y.im)) (- (* y.re x.im) (* x.re y.im))) (- (* y.re x.im) (* x.re 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)))
504.0ms
(/ (* (* (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re)) (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re))) (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re))) (* (* (hypot y.im y.re) (hypot y.im y.re)) (hypot y.im y.re)))
286.0ms
(/ (/ (* (cbrt (- (* y.re x.im) (* x.re y.im))) (cbrt (- (* y.re x.im) (* x.re y.im)))) (* (cbrt (hypot y.im y.re)) (cbrt (hypot y.im y.re)))) 1)
267.0ms
(- (pow (* y.re x.im) 3) (pow (* x.re y.im) 3))

prune1.5s

Pruning

12 alts after pruning (12 fresh and 0 done)

Merged error: 4.5b

localize9.0ms

Local error

Found 4 expressions with local error:

16.6b
(* (/ 1 (hypot y.im y.re)) (- (* x.im y.re) (* x.re y.im)))
0.2b
(- (* x.im y.re) (* x.re y.im))
0.1b
(/ (* (/ 1 (hypot y.im y.re)) (- (* x.im y.re) (* x.re y.im))) (hypot y.im y.re))
0.0b
(hypot y.im y.re)

rewrite20.0ms

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

series312.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
146.0ms
(/ (* (/ 1 (hypot y.im y.re)) (- (* x.im y.re) (* x.re y.im))) (hypot y.im y.re))
97.0ms
(* (/ 1 (hypot y.im y.re)) (- (* x.im y.re) (* x.re y.im)))
42.0ms
(hypot y.im y.re)
26.0ms
(- (* x.im y.re) (* x.re y.im))

simplify5.1s

Counts
57 → 99
Calls
57 calls:
Slowest
386.0ms
(* (- (* x.re y.im)) (/ 1 (hypot y.im y.re)))
320.0ms
(* (/ 1 (hypot y.im y.re)) (- (pow (* x.im y.re) 3) (pow (* x.re y.im) 3)))
319.0ms
(* (- (* x.re y.im)) (/ 1 (hypot y.im y.re)))
316.0ms
(* 1 (- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.re y.im))))
280.0ms
(- (log (* (/ 1 (hypot y.im y.re)) (- (* x.im y.re) (* x.re y.im)))) (log (hypot y.im y.re)))

prune1.1s

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 0.9b

regimes283.0ms

Accuracy

32.1% (5.4b remaining)

Error of 7.1b against oracle of 1.7b and baseline of 9.6b

bsearch153.0ms

end0.0ms

sample1.8s

Algorithm
intervals
Results
1.2s8441×body80valid