


Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < -3.888992367226674e+174Initial program 44.7
Simplified44.7
rmApplied add-sqr-sqrt44.7
Applied *-un-lft-identity44.7
Applied times-frac44.7
Simplified44.7
Simplified29.6
rmApplied associate-*l/29.6
Simplified29.6
rmApplied clear-num29.6
Taylor expanded around -inf 13.0
if -3.888992367226674e+174 < y.im < 2.3163448447978856e+141Initial program 18.8
Simplified18.8
rmApplied add-sqr-sqrt18.8
Applied *-un-lft-identity18.8
Applied times-frac18.8
Simplified18.8
Simplified11.6
rmApplied associate-*l/11.5
Simplified11.5
rmApplied clear-num11.6
rmApplied associate-/r/11.6
Applied associate-/l*11.6
if 2.3163448447978856e+141 < y.im Initial program 43.0
Simplified43.0
rmApplied add-sqr-sqrt43.0
Applied *-un-lft-identity43.0
Applied times-frac43.0
Simplified43.0
Simplified27.7
rmApplied associate-*l/27.7
Simplified27.7
rmApplied clear-num27.7
Taylor expanded around inf 13.7
Simplified13.7
Final simplification12.1
herbie shell --seed 2019002 +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))))
Time bar (total: 28.0s)Debug log
1 calls. Slowest were:
| 67.0ms | (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) |
1 alts after pruning (1 fresh and 0 done)
Merged error: 25.6b
Found 2 expressions with local error:
| 25.6b | (/ (- (* x.im y.re) (* x.re y.im)) (fma y.im y.im (* y.re y.re))) |
| 0.3b | (- (* x.im y.re) (* x.re y.im)) |
2 calls. Slowest were:
| 6.0ms | (/ (- (* x.im y.re) (* x.re y.im)) (fma y.im y.im (* y.re y.re))) |
| 2.0ms | (- (* x.im y.re) (* x.re y.im)) |
2 calls. Slowest were:
| 81.0ms | (/ (- (* x.im y.re) (* x.re y.im)) (fma y.im y.im (* y.re y.re))) |
| 34.0ms | (- (* x.im y.re) (* x.re y.im)) |
37 calls. Slowest were:
| 526.0ms | (- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.re y.im))) |
| 347.0ms | (- (pow (* x.im y.re) 3) (pow (* x.re y.im) 3)) |
| 294.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)))) |
12 alts after pruning (12 fresh and 0 done)
Merged error: 16.7b
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.3b | (- (* x.im y.re) (* x.re y.im)) |
| 0.0b | (hypot y.im y.re) |
4 calls. Slowest were:
| 15.0ms | (* (/ 1 (hypot y.im y.re)) (/ (- (* x.im y.re) (* x.re y.im)) (hypot y.im y.re))) |
| 12.0ms | (/ (- (* x.im y.re) (* x.re y.im)) (hypot y.im y.re)) |
| 4.0ms | (- (* x.im y.re) (* x.re y.im)) |
4 calls. Slowest were:
| 153.0ms | (* (/ 1 (hypot y.im y.re)) (/ (- (* x.im y.re) (* x.re y.im)) (hypot y.im y.re))) |
| 92.0ms | (/ (- (* x.im y.re) (* x.re y.im)) (hypot y.im y.re)) |
| 39.0ms | (hypot y.im y.re) |
| 33.0ms | (- (* x.im y.re) (* x.re y.im)) |
69 calls. Slowest were:
| 604.0ms | (- (* (* x.im y.re) (* x.im y.re)) (* (* x.re y.im) (* x.re y.im))) |
| 386.0ms | (* 1 (/ (- (* x.im y.re) (* x.re y.im)) (hypot y.im y.re))) |
| 314.0ms | (- (pow (* x.im y.re) 3) (pow (* x.re y.im) 3)) |
14 alts after pruning (14 fresh and 0 done)
Merged error: 6.3b
Found 4 expressions with local error:
| 16.5b | (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re)) |
| 0.3b | (- (* 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) |
4 calls. Slowest were:
| 12.0ms | (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re)) |
| 8.0ms | (/ (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re)) (hypot y.im y.re)) |
| 2.0ms | (- (* y.re x.im) (* x.re y.im)) |
4 calls. Slowest were:
| 94.0ms | (/ (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re)) (hypot y.im y.re)) |
| 92.0ms | (/ (- (* y.re x.im) (* x.re y.im)) (hypot y.im y.re)) |
| 36.0ms | (- (* y.re x.im) (* x.re y.im)) |
| 25.0ms | (hypot y.im y.re) |
142 calls. Slowest were:
| 579.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))) |
| 545.0ms | (- (* (* y.re x.im) (* y.re x.im)) (* (* x.re y.im) (* x.re y.im))) |
| 457.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))) |
15 alts after pruning (15 fresh and 0 done)
Merged error: 6.3b
Found 4 expressions with local error:
| 16.5b | (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im))) |
| 0.3b | (- (* y.re x.im) (* x.re y.im)) |
| 0.2b | (/ 1 (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im)))) |
| 0.1b | (/ (/ 1 (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im)))) (hypot y.im y.re)) |
4 calls. Slowest were:
| 5.0ms | (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im))) |
| 4.0ms | (/ (/ 1 (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im)))) (hypot y.im y.re)) |
| 3.0ms | (/ 1 (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im)))) |
4 calls. Slowest were:
| 113.0ms | (/ (/ 1 (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im)))) (hypot y.im y.re)) |
| 92.0ms | (/ 1 (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im)))) |
| 62.0ms | (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im))) |
| 27.0ms | (- (* y.re x.im) (* x.re y.im)) |
99 calls. Slowest were:
| 839.0ms | (/ (/ 1 (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im)))) (hypot y.im y.re)) |
| 423.0ms | (/ (/ 1 (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im)))) (hypot y.im y.re)) |
| 334.0ms | (/ (sqrt (/ 1 (/ (hypot y.im y.re) (- (* y.re x.im) (* x.re y.im))))) (cbrt (hypot y.im y.re))) |
13 alts after pruning (13 fresh and 0 done)
Merged error: 1.5b
28.9% (9.8b remaining)
Error of 12.1b against oracle of 2.3b and baseline of 16.1b