Time bar (total: 7.0s)
| 1× | search |
| True | Other | False | Iter |
|---|---|---|---|
| 0% | 99.9% | 0.1% | 0 |
| 0% | 99.9% | 0.1% | 1 |
| 0% | 99.9% | 0.1% | 2 |
| 0% | 99.9% | 0.1% | 3 |
| 0% | 99.9% | 0.1% | 4 |
| 50% | 50% | 0.1% | 5 |
| 50% | 50% | 0.1% | 6 |
| 50% | 37.5% | 12.6% | 7 |
| 50% | 37.5% | 12.6% | 8 |
| 50% | 31.2% | 18.8% | 9 |
| 50% | 31.2% | 18.8% | 10 |
| 50% | 28.1% | 22% | 11 |
| 50% | 28.1% | 22% | 12 |
Compiled 14 to 11 computations (21.4% saved)
| 1.5s | 2003× | body | 1024 | valid |
| 997.0ms | 1967× | body | 1024 | invalid |
| 903.0ms | 5255× | body | 256 | valid |
| 489.0ms | 1475× | body | 256 | invalid |
| 402.0ms | 994× | body | 512 | valid |
| 300.0ms | 1019× | body | 512 | invalid |
| 6.0ms | 4× | body | 2048 | valid |
| 2.0ms | 1× | body | 2048 | invalid |
| 2× | egg-herbie |
| 748× | times-frac_binary64 |
| 628× | fma-def_binary64 |
| 384× | sqr-pow_binary64 |
| 320× | unswap-sqr_binary64 |
| 302× | associate-*l*_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 18 | 36 |
| 1 | 49 | 36 |
| 2 | 131 | 36 |
| 3 | 255 | 34 |
| 4 | 372 | 34 |
| 5 | 669 | 34 |
| 6 | 1531 | 34 |
| 7 | 2660 | 34 |
| 8 | 3812 | 34 |
| 9 | 4558 | 34 |
| 10 | 5152 | 34 |
| 11 | 6060 | 34 |
| 12 | 7567 | 34 |
| 0 | 2 | 2 |
| 1× | saturated |
| 1× | node limit |
| Inputs |
|---|
0 |
1 |
| Outputs |
|---|
0 |
1 |
| Inputs |
|---|
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
(*.f64 (*.f64 1/2 (cos.f64 im)) (+.f64 (exp.f64 (neg.f64 re)) (exp.f64 re))) |
| Outputs |
|---|
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
(*.f64 (cos.f64 re) (*.f64 1/2 (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im)))) |
(*.f64 (cos.f64 re) (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im)))) |
(*.f64 (*.f64 1/2 (cos.f64 im)) (+.f64 (exp.f64 (neg.f64 re)) (exp.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 im) (+.f64 (exp.f64 (neg.f64 re)) (exp.f64 re)))) |
(*.f64 (cos.f64 im) (fma.f64 1/2 (exp.f64 re) (/.f64 1/2 (exp.f64 re)))) |
Compiled 15 to 12 computations (20% saved)
| 1× | egg-herbie |
| 573× | fma-def_binary64 |
| 530× | associate-/l*_binary64 |
| 430× | unswap-sqr_binary64 |
| 374× | times-frac_binary64 |
| 340× | associate-/r/_binary64 |
Useful iterations: 3 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 11 | 18 |
| 1 | 28 | 18 |
| 2 | 70 | 18 |
| 3 | 132 | 17 |
| 4 | 192 | 17 |
| 5 | 346 | 17 |
| 6 | 780 | 17 |
| 7 | 1351 | 17 |
| 8 | 3967 | 17 |
| 9 | 4490 | 17 |
| 10 | 5461 | 17 |
| 11 | 6024 | 17 |
| 12 | 7058 | 17 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| Outputs |
|---|
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im)))) |
(*.f64 (cos.f64 re) (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im)))) |
Compiled 24 to 15 computations (37.5% saved)
2 alts after pruning (2 fresh and 0 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 1 | 1 | 2 |
| Fresh | 0 | 1 | 1 |
| Picked | 0 | 0 | 0 |
| Done | 0 | 0 | 0 |
| Total | 1 | 2 | 3 |
| Status | Error | Program |
|---|---|---|
| ▶ | 0.0b | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
Compiled 13 to 10 computations (23.1% saved)
Found 1 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
Compiled 35 to 13 computations (62.9% saved)
6 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 1.0ms | im | @ | inf | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| 1.0ms | re | @ | 0 | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| 1.0ms | re | @ | -inf | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| 1.0ms | re | @ | inf | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| 1.0ms | im | @ | 0 | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| 1× | egg-rewrite-iter-limit |
| 1× | batch-egg-rewrite |
| 121× | add-sqr-sqrt_binary64 |
| 116× | *-un-lft-identity_binary64 |
| 116× | pow1_binary64 |
| 114× | add-log-exp_binary64 |
| 112× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 11 | 18 |
| 1 | 233 | 18 |
| 2 | 3780 | 18 |
| 0 | 11 | 18 |
| 1× | iter limit |
| 1× | unsound |
| Inputs |
|---|
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (exp.f64 (neg.f64 im)) (*.f64 1/2 (cos.f64 re))) (*.f64 (exp.f64 im) (*.f64 1/2 (cos.f64 re))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 (neg.f64 im))) (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (*.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im)))) (*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))))) (*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im)))))))))) |
| 1× | egg-herbie |
| 587× | associate-+l+_binary64 |
| 587× | distribute-rgt-out_binary64 |
| 480× | distribute-lft-out_binary64 |
| 401× | associate-+r+_binary64 |
| 365× | distribute-rgt-in_binary64 |
Useful iterations: 4 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 54 | 542 |
| 1 | 168 | 485 |
| 2 | 545 | 451 |
| 3 | 2097 | 446 |
| 4 | 4751 | 444 |
| 5 | 6885 | 444 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
(+.f64 (*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))))) |
(+.f64 (*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) (+.f64 (*.f64 -1/4 (*.f64 (pow.f64 re 2) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) (*.f64 1/48 (*.f64 (pow.f64 re 4) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))))) |
(+.f64 (*.f64 -1/1440 (*.f64 (pow.f64 re 6) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) (+.f64 (*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) (+.f64 (*.f64 -1/4 (*.f64 (pow.f64 re 2) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) (*.f64 1/48 (*.f64 (pow.f64 re 4) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(cos.f64 re) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (cos.f64 re) (*.f64 1/24 (*.f64 (cos.f64 re) (pow.f64 im 4))))) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (cos.f64 re) (+.f64 (*.f64 1/24 (*.f64 (cos.f64 re) (pow.f64 im 4))) (*.f64 1/720 (*.f64 (cos.f64 re) (pow.f64 im 6)))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (*.f64 -1 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (*.f64 -1 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (*.f64 -1 im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (*.f64 -1 im))))) |
| Outputs |
|---|
(*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
(fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) |
(+.f64 (*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))))) |
(fma.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (*.f64 -1/4 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (*.f64 re re)))) |
(*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (+.f64 1/2 (*.f64 (*.f64 -1/4 re) re))) |
(*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (fma.f64 -1/4 (*.f64 re re) 1/2)) |
(+.f64 (*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) (+.f64 (*.f64 -1/4 (*.f64 (pow.f64 re 2) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) (*.f64 1/48 (*.f64 (pow.f64 re 4) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))))) |
(fma.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (fma.f64 -1/4 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (*.f64 re re)) (*.f64 (*.f64 1/48 (pow.f64 re 4)) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))))) |
(fma.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (+.f64 (*.f64 (*.f64 -1/4 re) re) (*.f64 1/48 (pow.f64 re 4))))) |
(*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (+.f64 1/2 (fma.f64 -1/4 (*.f64 re re) (*.f64 1/48 (pow.f64 re 4))))) |
(+.f64 (*.f64 -1/1440 (*.f64 (pow.f64 re 6) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) (+.f64 (*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) (+.f64 (*.f64 -1/4 (*.f64 (pow.f64 re 2) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) (*.f64 1/48 (*.f64 (pow.f64 re 4) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))))))) |
(fma.f64 -1/1440 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (pow.f64 re 6)) (fma.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (fma.f64 -1/4 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (*.f64 re re)) (*.f64 (*.f64 1/48 (pow.f64 re 4)) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))))) |
(+.f64 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (+.f64 (*.f64 (*.f64 -1/4 re) re) (*.f64 1/48 (pow.f64 re 4)))) (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (+.f64 (*.f64 -1/1440 (pow.f64 re 6)) 1/2))) |
(*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (+.f64 (fma.f64 -1/4 (*.f64 re re) (*.f64 1/48 (pow.f64 re 4))) (fma.f64 -1/1440 (pow.f64 re 6) 1/2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(cos.f64 re) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(fma.f64 1/2 (*.f64 (cos.f64 re) (*.f64 im im)) (cos.f64 re)) |
(*.f64 (+.f64 (*.f64 1/2 (*.f64 im im)) 1) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (cos.f64 re) (*.f64 1/24 (*.f64 (cos.f64 re) (pow.f64 im 4))))) |
(fma.f64 1/2 (*.f64 (cos.f64 re) (*.f64 im im)) (+.f64 (cos.f64 re) (*.f64 1/24 (*.f64 (cos.f64 re) (pow.f64 im 4))))) |
(fma.f64 1/2 (*.f64 (cos.f64 re) (*.f64 im im)) (fma.f64 1/24 (*.f64 (cos.f64 re) (pow.f64 im 4)) (cos.f64 re))) |
(+.f64 (cos.f64 re) (*.f64 (cos.f64 re) (+.f64 (*.f64 1/24 (pow.f64 im 4)) (*.f64 1/2 (*.f64 im im))))) |
(*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4))))) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (cos.f64 re) (+.f64 (*.f64 1/24 (*.f64 (cos.f64 re) (pow.f64 im 4))) (*.f64 1/720 (*.f64 (cos.f64 re) (pow.f64 im 6)))))) |
(+.f64 (fma.f64 1/2 (*.f64 (cos.f64 re) (*.f64 im im)) (cos.f64 re)) (fma.f64 1/24 (*.f64 (cos.f64 re) (pow.f64 im 4)) (*.f64 1/720 (*.f64 (cos.f64 re) (pow.f64 im 6))))) |
(+.f64 (fma.f64 1/2 (*.f64 (cos.f64 re) (*.f64 im im)) (cos.f64 re)) (fma.f64 1/24 (*.f64 (cos.f64 re) (pow.f64 im 4)) (*.f64 (cos.f64 re) (*.f64 (pow.f64 im 6) 1/720)))) |
(+.f64 (*.f64 (+.f64 (*.f64 1/2 (*.f64 im im)) 1) (cos.f64 re)) (*.f64 (cos.f64 re) (+.f64 (*.f64 1/24 (pow.f64 im 4)) (*.f64 1/720 (pow.f64 im 6))))) |
(+.f64 (cos.f64 re) (*.f64 (cos.f64 re) (+.f64 (+.f64 (*.f64 1/720 (pow.f64 im 6)) (*.f64 1/2 (*.f64 im im))) (*.f64 1/24 (pow.f64 im 4))))) |
(*.f64 (cos.f64 re) (+.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (+.f64 (*.f64 1/720 (pow.f64 im 6)) (*.f64 1/24 (pow.f64 im 4))))) |
(*.f64 (cos.f64 re) (+.f64 (*.f64 1/24 (pow.f64 im 4)) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/720 (pow.f64 im 6)))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (*.f64 -1 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (*.f64 -1 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (*.f64 -1 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 (exp.f64 im) (exp.f64 (*.f64 -1 im))))) |
(*.f64 1/2 (*.f64 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im))) (cos.f64 re))) |
(*.f64 (fma.f64 1/2 (exp.f64 im) (/.f64 1/2 (exp.f64 im))) (cos.f64 re)) |
Compiled 453 to 209 computations (53.9% saved)
6 alts after pruning (5 fresh and 1 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 21 | 5 | 26 |
| Fresh | 0 | 0 | 0 |
| Picked | 0 | 1 | 1 |
| Done | 0 | 0 | 0 |
| Total | 21 | 6 | 27 |
| Status | Error | Program |
|---|---|---|
| ▶ | 0b | (+.f64 (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 (neg.f64 im))) (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im))) |
| ▶ | 25.9b | (*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
| ▶ | 0.6b | (*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4))))) |
| ▶ | 0.8b | (*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
| ▶ | 1.2b | (cos.f64 re) |
| ✓ | 0.0b | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
Compiled 137 to 104 computations (24.1% saved)
Found 2 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 (neg.f64 im))) |
| ✓ | 0.0b | (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im)) |
Compiled 49 to 22 computations (55.1% saved)
12 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 10.0ms | im | @ | inf | (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 (neg.f64 im))) |
| 2.0ms | im | @ | -inf | (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im)) |
| 1.0ms | im | @ | inf | (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im)) |
| 1.0ms | re | @ | 0 | (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im)) |
| 1.0ms | re | @ | inf | (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im)) |
| 1× | batch-egg-rewrite |
| 772× | pow1_binary64 |
| 710× | add-log-exp_binary64 |
| 708× | log1p-expm1-u_binary64 |
| 708× | expm1-log1p-u_binary64 |
| 694× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 11 | 22 |
| 1 | 218 | 22 |
| 2 | 2696 | 22 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im)) |
(*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 (neg.f64 im))) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (pow.f64 (exp.f64 (cos.f64 re)) 1/2) (exp.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 1/2 (cos.f64 re)) 3) (pow.f64 (exp.f64 im) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (exp.f64 im) 3) (pow.f64 (*.f64 1/2 (cos.f64 re)) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 im (log.f64 (*.f64 1/2 (cos.f64 re))))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (pow.f64 (exp.f64 (cos.f64 re)) 1/2) (exp.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 1/2 (cos.f64 re)) 3) (pow.f64 (exp.f64 im) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (exp.f64 im) 3) (pow.f64 (*.f64 1/2 (cos.f64 re)) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (exp.f64 im)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 im (log.f64 (*.f64 1/2 (cos.f64 re))))))))) |
| 1× | egg-herbie |
| 734× | unswap-sqr_binary64 |
| 716× | distribute-lft-out_binary64 |
| 603× | associate-*r/_binary64 |
| 488× | fma-def_binary64 |
| 406× | *-commutative_binary64 |
Useful iterations: 4 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 76 | 767 |
| 1 | 214 | 709 |
| 2 | 588 | 662 |
| 3 | 2008 | 626 |
| 4 | 3643 | 622 |
| 5 | 6897 | 622 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 1/2 (exp.f64 im)) |
(+.f64 (*.f64 1/2 (exp.f64 im)) (*.f64 -1/4 (*.f64 (exp.f64 im) (pow.f64 re 2)))) |
(+.f64 (*.f64 1/48 (*.f64 (exp.f64 im) (pow.f64 re 4))) (+.f64 (*.f64 1/2 (exp.f64 im)) (*.f64 -1/4 (*.f64 (exp.f64 im) (pow.f64 re 2))))) |
(+.f64 (*.f64 1/48 (*.f64 (exp.f64 im) (pow.f64 re 4))) (+.f64 (*.f64 1/2 (exp.f64 im)) (+.f64 (*.f64 -1/4 (*.f64 (exp.f64 im) (pow.f64 re 2))) (*.f64 -1/1440 (*.f64 (exp.f64 im) (pow.f64 re 6)))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) im)) (*.f64 1/2 (cos.f64 re))) |
(+.f64 (*.f64 1/4 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) im)) (*.f64 1/2 (cos.f64 re)))) |
(+.f64 (*.f64 1/4 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (*.f64 1/12 (*.f64 (cos.f64 re) (pow.f64 im 3))) (+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) im)) (*.f64 1/2 (cos.f64 re))))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (exp.f64 (neg.f64 im))) |
(+.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (exp.f64 (neg.f64 im))))) |
(+.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (+.f64 (*.f64 1/48 (*.f64 (pow.f64 re 4) (exp.f64 (neg.f64 im)))) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (exp.f64 (neg.f64 im)))))) |
(+.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (+.f64 (*.f64 1/48 (*.f64 (pow.f64 re 4) (exp.f64 (neg.f64 im)))) (+.f64 (*.f64 -1/4 (*.f64 (pow.f64 re 2) (exp.f64 (neg.f64 im)))) (*.f64 -1/1440 (*.f64 (pow.f64 re 6) (exp.f64 (neg.f64 im))))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (cos.f64 re)) |
(+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1/2 (*.f64 (cos.f64 re) im))) |
(+.f64 (*.f64 1/4 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1/2 (*.f64 (cos.f64 re) im)))) |
(+.f64 (*.f64 -1/12 (*.f64 (cos.f64 re) (pow.f64 im 3))) (+.f64 (*.f64 1/4 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1/2 (*.f64 (cos.f64 re) im))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 1/2 (*.f64 (exp.f64 (*.f64 -1 im)) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 (*.f64 -1 im)) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 (*.f64 -1 im)) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 (*.f64 -1 im)) (cos.f64 re))) |
| Outputs |
|---|
(*.f64 1/2 (exp.f64 im)) |
(+.f64 (*.f64 1/2 (exp.f64 im)) (*.f64 -1/4 (*.f64 (exp.f64 im) (pow.f64 re 2)))) |
(fma.f64 1/2 (exp.f64 im) (*.f64 -1/4 (*.f64 (exp.f64 im) (*.f64 re re)))) |
(fma.f64 -1/4 (*.f64 (exp.f64 im) (*.f64 re re)) (*.f64 1/2 (exp.f64 im))) |
(*.f64 (exp.f64 im) (fma.f64 -1/4 (*.f64 re re) 1/2)) |
(+.f64 (*.f64 1/48 (*.f64 (exp.f64 im) (pow.f64 re 4))) (+.f64 (*.f64 1/2 (exp.f64 im)) (*.f64 -1/4 (*.f64 (exp.f64 im) (pow.f64 re 2))))) |
(fma.f64 1/48 (*.f64 (exp.f64 im) (pow.f64 re 4)) (fma.f64 1/2 (exp.f64 im) (*.f64 -1/4 (*.f64 (exp.f64 im) (*.f64 re re))))) |
(fma.f64 1/48 (*.f64 (exp.f64 im) (pow.f64 re 4)) (fma.f64 -1/4 (*.f64 (exp.f64 im) (*.f64 re re)) (*.f64 1/2 (exp.f64 im)))) |
(fma.f64 1/2 (exp.f64 im) (*.f64 (exp.f64 im) (fma.f64 -1/4 (*.f64 re re) (*.f64 1/48 (pow.f64 re 4))))) |
(*.f64 (exp.f64 im) (+.f64 1/2 (fma.f64 -1/4 (*.f64 re re) (*.f64 1/48 (pow.f64 re 4))))) |
(+.f64 (*.f64 1/48 (*.f64 (exp.f64 im) (pow.f64 re 4))) (+.f64 (*.f64 1/2 (exp.f64 im)) (+.f64 (*.f64 -1/4 (*.f64 (exp.f64 im) (pow.f64 re 2))) (*.f64 -1/1440 (*.f64 (exp.f64 im) (pow.f64 re 6)))))) |
(fma.f64 1/48 (*.f64 (exp.f64 im) (pow.f64 re 4)) (fma.f64 1/2 (exp.f64 im) (fma.f64 -1/4 (*.f64 (exp.f64 im) (*.f64 re re)) (*.f64 -1/1440 (*.f64 (exp.f64 im) (pow.f64 re 6)))))) |
(fma.f64 1/48 (*.f64 (exp.f64 im) (pow.f64 re 4)) (fma.f64 1/2 (exp.f64 im) (fma.f64 -1/4 (*.f64 (exp.f64 im) (*.f64 re re)) (*.f64 (exp.f64 im) (*.f64 -1/1440 (pow.f64 re 6)))))) |
(+.f64 (*.f64 (exp.f64 im) (fma.f64 -1/4 (*.f64 re re) (*.f64 1/48 (pow.f64 re 4)))) (*.f64 (exp.f64 im) (+.f64 1/2 (*.f64 -1/1440 (pow.f64 re 6))))) |
(*.f64 (exp.f64 im) (+.f64 (fma.f64 -1/4 (*.f64 re re) (*.f64 1/48 (pow.f64 re 4))) (+.f64 1/2 (*.f64 -1/1440 (pow.f64 re 6))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) im)) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (+.f64 (*.f64 im (cos.f64 re)) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (+.f64 im 1) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (+.f64 im 1))) |
(*.f64 1/2 (fma.f64 im (cos.f64 re) (cos.f64 re))) |
(+.f64 (*.f64 1/4 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) im)) (*.f64 1/2 (cos.f64 re)))) |
(fma.f64 1/4 (*.f64 (cos.f64 re) (*.f64 im im)) (*.f64 1/2 (+.f64 (*.f64 im (cos.f64 re)) (cos.f64 re)))) |
(fma.f64 1/2 (*.f64 (+.f64 im 1) (cos.f64 re)) (*.f64 (cos.f64 re) (*.f64 (*.f64 im im) 1/4))) |
(fma.f64 1/2 (cos.f64 re) (*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 im) (*.f64 im (*.f64 im 1/4))))) |
(*.f64 (cos.f64 re) (+.f64 1/2 (*.f64 im (+.f64 1/2 (*.f64 im 1/4))))) |
(+.f64 (*.f64 1/4 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (*.f64 1/12 (*.f64 (cos.f64 re) (pow.f64 im 3))) (+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) im)) (*.f64 1/2 (cos.f64 re))))) |
(fma.f64 1/4 (*.f64 (cos.f64 re) (*.f64 im im)) (fma.f64 1/12 (*.f64 (cos.f64 re) (pow.f64 im 3)) (*.f64 1/2 (+.f64 (*.f64 im (cos.f64 re)) (cos.f64 re))))) |
(fma.f64 1/4 (*.f64 (cos.f64 re) (*.f64 im im)) (fma.f64 1/2 (*.f64 (+.f64 im 1) (cos.f64 re)) (*.f64 (pow.f64 im 3) (*.f64 (cos.f64 re) 1/12)))) |
(fma.f64 1/2 (*.f64 (cos.f64 re) (+.f64 im 1)) (*.f64 (cos.f64 re) (+.f64 (*.f64 im (*.f64 im 1/4)) (*.f64 1/12 (pow.f64 im 3))))) |
(*.f64 (cos.f64 re) (+.f64 (+.f64 1/2 (*.f64 1/2 im)) (*.f64 (*.f64 im im) (+.f64 (*.f64 im 1/12) 1/4)))) |
(*.f64 (cos.f64 re) (+.f64 1/2 (+.f64 (*.f64 1/2 im) (*.f64 (*.f64 im im) (+.f64 1/4 (*.f64 im 1/12)))))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 (exp.f64 im) (cos.f64 re))) |
(*.f64 1/2 (exp.f64 (neg.f64 im))) |
(/.f64 1/2 (exp.f64 im)) |
(+.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (exp.f64 (neg.f64 im))))) |
(fma.f64 1/2 (exp.f64 (neg.f64 im)) (*.f64 -1/4 (*.f64 (*.f64 re re) (exp.f64 (neg.f64 im))))) |
(*.f64 (exp.f64 (neg.f64 im)) (+.f64 1/2 (*.f64 -1/4 (*.f64 re re)))) |
(*.f64 (exp.f64 (neg.f64 im)) (fma.f64 -1/4 (*.f64 re re) 1/2)) |
(/.f64 (fma.f64 -1/4 (*.f64 re re) 1/2) (exp.f64 im)) |
(+.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (+.f64 (*.f64 1/48 (*.f64 (pow.f64 re 4) (exp.f64 (neg.f64 im)))) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (exp.f64 (neg.f64 im)))))) |
(fma.f64 1/2 (exp.f64 (neg.f64 im)) (fma.f64 1/48 (*.f64 (pow.f64 re 4) (exp.f64 (neg.f64 im))) (*.f64 -1/4 (*.f64 (*.f64 re re) (exp.f64 (neg.f64 im)))))) |
(+.f64 (/.f64 1/2 (exp.f64 im)) (*.f64 (exp.f64 (neg.f64 im)) (+.f64 (*.f64 -1/4 (*.f64 re re)) (*.f64 1/48 (pow.f64 re 4))))) |
(*.f64 (exp.f64 (neg.f64 im)) (+.f64 1/2 (fma.f64 -1/4 (*.f64 re re) (*.f64 1/48 (pow.f64 re 4))))) |
(/.f64 (+.f64 1/2 (fma.f64 -1/4 (*.f64 re re) (*.f64 1/48 (pow.f64 re 4)))) (exp.f64 im)) |
(+.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (+.f64 (*.f64 1/48 (*.f64 (pow.f64 re 4) (exp.f64 (neg.f64 im)))) (+.f64 (*.f64 -1/4 (*.f64 (pow.f64 re 2) (exp.f64 (neg.f64 im)))) (*.f64 -1/1440 (*.f64 (pow.f64 re 6) (exp.f64 (neg.f64 im))))))) |
(fma.f64 1/2 (exp.f64 (neg.f64 im)) (fma.f64 1/48 (*.f64 (pow.f64 re 4) (exp.f64 (neg.f64 im))) (fma.f64 -1/4 (*.f64 (*.f64 re re) (exp.f64 (neg.f64 im))) (*.f64 -1/1440 (*.f64 (pow.f64 re 6) (exp.f64 (neg.f64 im))))))) |
(+.f64 (*.f64 (exp.f64 (neg.f64 im)) (+.f64 (*.f64 -1/4 (*.f64 re re)) (*.f64 -1/1440 (pow.f64 re 6)))) (*.f64 (exp.f64 (neg.f64 im)) (+.f64 1/2 (*.f64 1/48 (pow.f64 re 4))))) |
(*.f64 (exp.f64 (neg.f64 im)) (+.f64 (fma.f64 -1/4 (*.f64 re re) (*.f64 -1/1440 (pow.f64 re 6))) (+.f64 1/2 (*.f64 1/48 (pow.f64 re 4))))) |
(*.f64 (exp.f64 (neg.f64 im)) (+.f64 1/2 (+.f64 (*.f64 -1/1440 (pow.f64 re 6)) (fma.f64 -1/4 (*.f64 re re) (*.f64 1/48 (pow.f64 re 4)))))) |
(/.f64 (+.f64 (fma.f64 -1/4 (*.f64 re re) (*.f64 1/48 (pow.f64 re 4))) (+.f64 1/2 (*.f64 -1/1440 (pow.f64 re 6)))) (exp.f64 im)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (cos.f64 re)) |
(+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1/2 (*.f64 (cos.f64 re) im))) |
(fma.f64 1/2 (cos.f64 re) (*.f64 (*.f64 im (cos.f64 re)) -1/2)) |
(fma.f64 1/2 (cos.f64 re) (*.f64 im (*.f64 (cos.f64 re) -1/2))) |
(*.f64 (cos.f64 re) (+.f64 1/2 (*.f64 im -1/2))) |
(+.f64 (*.f64 1/4 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1/2 (*.f64 (cos.f64 re) im)))) |
(fma.f64 1/4 (*.f64 (cos.f64 re) (*.f64 im im)) (fma.f64 1/2 (cos.f64 re) (*.f64 (*.f64 im (cos.f64 re)) -1/2))) |
(fma.f64 1/4 (*.f64 (cos.f64 re) (*.f64 im im)) (fma.f64 1/2 (cos.f64 re) (*.f64 im (*.f64 (cos.f64 re) -1/2)))) |
(fma.f64 im (*.f64 (cos.f64 re) -1/2) (*.f64 (cos.f64 re) (+.f64 1/2 (*.f64 im (*.f64 im 1/4))))) |
(*.f64 (cos.f64 re) (+.f64 (*.f64 im (+.f64 (*.f64 im 1/4) -1/2)) 1/2)) |
(*.f64 (cos.f64 re) (+.f64 1/2 (*.f64 im (+.f64 -1/2 (*.f64 im 1/4))))) |
(+.f64 (*.f64 -1/12 (*.f64 (cos.f64 re) (pow.f64 im 3))) (+.f64 (*.f64 1/4 (*.f64 (cos.f64 re) (pow.f64 im 2))) (+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1/2 (*.f64 (cos.f64 re) im))))) |
(fma.f64 -1/12 (*.f64 (cos.f64 re) (pow.f64 im 3)) (fma.f64 1/4 (*.f64 (cos.f64 re) (*.f64 im im)) (fma.f64 1/2 (cos.f64 re) (*.f64 (*.f64 im (cos.f64 re)) -1/2)))) |
(fma.f64 (*.f64 (cos.f64 re) (pow.f64 im 3)) -1/12 (fma.f64 1/4 (*.f64 (cos.f64 re) (*.f64 im im)) (fma.f64 1/2 (cos.f64 re) (*.f64 im (*.f64 (cos.f64 re) -1/2))))) |
(+.f64 (*.f64 (cos.f64 re) (+.f64 1/2 (*.f64 im -1/2))) (*.f64 (cos.f64 re) (+.f64 (*.f64 im (*.f64 im 1/4)) (*.f64 (pow.f64 im 3) -1/12)))) |
(*.f64 (cos.f64 re) (+.f64 (+.f64 1/2 (*.f64 im -1/2)) (*.f64 (*.f64 im im) (+.f64 (*.f64 im -1/12) 1/4)))) |
(*.f64 (cos.f64 re) (+.f64 (*.f64 im -1/2) (+.f64 1/2 (*.f64 (*.f64 im im) (+.f64 1/4 (*.f64 im -1/12)))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 (*.f64 -1 im)) (cos.f64 re))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 (*.f64 -1 im)) (cos.f64 re))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 (*.f64 -1 im)) (cos.f64 re))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
(*.f64 1/2 (*.f64 (exp.f64 (*.f64 -1 im)) (cos.f64 re))) |
(*.f64 (*.f64 1/2 (exp.f64 (neg.f64 im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (/.f64 1/2 (exp.f64 im))) |
(*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) |
Compiled 5 to 3 computations (40% saved)
Found 2 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (*.f64 1/2 (*.f64 im im)) |
| ✓ | 0.0b | (*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
Compiled 33 to 17 computations (48.5% saved)
9 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 2.0ms | im | @ | inf | (*.f64 1/2 (*.f64 im im)) |
| 2.0ms | re | @ | inf | (*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
| 1.0ms | im | @ | inf | (*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
| 1.0ms | re | @ | 0 | (*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
| 1.0ms | im | @ | 0 | (*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
| 1× | batch-egg-rewrite |
| 540× | prod-diff_binary64 |
| 468× | log-prod_binary64 |
| 359× | fma-def_binary64 |
| 357× | exp-prod_binary64 |
| 311× | pow-prod-down_binary64 |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 10 | 22 |
| 1 | 208 | 20 |
| 2 | 2632 | 20 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
(*.f64 1/2 (*.f64 im im)) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (cos.f64 re) (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (cos.f64 re) (*.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 (cos.f64 re)) (fma.f64 1/2 (*.f64 im im) 1))) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 (cos.f64 re)) (fma.f64 1/2 (*.f64 im im) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (cos.f64 re)) (fma.f64 1/2 (*.f64 im im) 1)))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (cos.f64 re)) (fma.f64 1/2 (*.f64 im im) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (cos.f64 re) 3) (*.f64 (pow.f64 (cos.f64 re) 3) (*.f64 1/8 (pow.f64 im 6)))) (+.f64 (pow.f64 (cos.f64 re) 2) (-.f64 (pow.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) 2) (*.f64 (cos.f64 re) (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im)))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (cos.f64 re) 2) (pow.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) 2)) (-.f64 (cos.f64 re) (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (fma.f64 1/8 (pow.f64 im 6) 1) (cos.f64 re)) (+.f64 1 (fma.f64 1/4 (pow.f64 im 4) (*.f64 -1/2 (*.f64 im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 1 (*.f64 1/4 (pow.f64 im 4))) (cos.f64 re)) (+.f64 1 (*.f64 -1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (cos.f64 re) (fma.f64 1/8 (pow.f64 im 6) 1)) (+.f64 1 (fma.f64 1/4 (pow.f64 im 4) (*.f64 -1/2 (*.f64 im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (cos.f64 re) (-.f64 1 (*.f64 1/4 (pow.f64 im 4)))) (+.f64 1 (*.f64 -1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (E.f64) (log.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (pow.f64 (cbrt.f64 (log.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)))) 2)) (cbrt.f64 (log.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (sqrt.f64 (log.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1))))) (sqrt.f64 (log.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (cos.f64 re)) (fma.f64 1/2 (*.f64 im im) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (cos.f64 re))) (pow.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) im) (cos.f64 re))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) im) (cos.f64 re)) (+.f64 1 (expm1.f64 (cos.f64 re)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 (cos.f64 re) (fma.f64 1/2 (*.f64 im im) 1))) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cos.f64 re) 1 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cos.f64 re) 1 (*.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im)) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (cos.f64 re) (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (cos.f64 re) (*.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re)) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re)) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 im im)) (cos.f64 re) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 1/4 (pow.f64 im 4))) (*.f64 (cbrt.f64 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (cos.f64 re)) (pow.f64 (cbrt.f64 (cos.f64 re)) 2) (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (cos.f64 re)) (pow.f64 (cbrt.f64 (cos.f64 re)) 2) (*.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (cos.f64 re)) 2) (cbrt.f64 (cos.f64 re)) (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (cos.f64 re)) 2) (cbrt.f64 (cos.f64 re)) (*.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (cos.f64 re)) 2) (*.f64 (cbrt.f64 (cos.f64 re)) (*.f64 1/2 (*.f64 im im))) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (cos.f64 re)) 2) (*.f64 (cbrt.f64 (cos.f64 re)) 1) (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (cos.f64 re)) 2) (*.f64 (cbrt.f64 (cos.f64 re)) 1) (*.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im (sqrt.f64 1/2)) (*.f64 (*.f64 im (sqrt.f64 1/2)) (cos.f64 re)) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (cos.f64 re)) (sqrt.f64 (cos.f64 re)) (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (cos.f64 re)) (sqrt.f64 (cos.f64 re)) (*.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (cos.f64 re)) (*.f64 (sqrt.f64 (cos.f64 re)) (*.f64 1/2 (*.f64 im im))) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (cos.f64 re)) (*.f64 (sqrt.f64 (cos.f64 re)) 1) (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (cos.f64 re)) (*.f64 (sqrt.f64 (cos.f64 re)) 1) (*.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 im) (*.f64 im (cos.f64 re)) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im)))) 2) (cbrt.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im)))) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 im (sqrt.f64 1/2)) (sqrt.f64 (cos.f64 re))) (*.f64 (*.f64 im (sqrt.f64 1/2)) (sqrt.f64 (cos.f64 re))) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cos.f64 re) 1/2) (*.f64 im im) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cos.f64 re) (*.f64 im im)) 1/2 (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cos.f64 re) (cbrt.f64 (*.f64 1/4 (pow.f64 im 4)))) (cbrt.f64 (*.f64 1/2 (*.f64 im im))) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cos.f64 re) (*.f64 im (sqrt.f64 1/2))) (*.f64 im (sqrt.f64 1/2)) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cos.f64 re) (*.f64 1/2 im)) im (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (*.f64 (*.f64 im (sqrt.f64 1/2)) (cbrt.f64 (cos.f64 re))) 2) (cbrt.f64 (cos.f64 re)) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 1/2 (*.f64 im im)) (sqrt.f64 (cos.f64 re))) (sqrt.f64 (cos.f64 re)) (cos.f64 re)))))) |
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 1/2 (*.f64 im im)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) im)) 2)) (log.f64 (cbrt.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) im))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) im))) (log.f64 (sqrt.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) im))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (fma.f64 1/2 (*.f64 im im) 1) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 1/2 (*.f64 im im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (E.f64) (log.f64 (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 1/4 (pow.f64 im 4)) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 1/2 (*.f64 im im))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 im (sqrt.f64 1/2)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 1/8 (pow.f64 im 6)) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (pow.f64 (cbrt.f64 (log.f64 (*.f64 1/2 (*.f64 im im)))) 2)) (cbrt.f64 (log.f64 (*.f64 1/2 (*.f64 im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (sqrt.f64 (log.f64 (*.f64 1/2 (*.f64 im im))))) (sqrt.f64 (log.f64 (*.f64 1/2 (*.f64 im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 1/4 (pow.f64 im 4)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (sqrt.f64 (exp.f64 im)) im))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 1/8 (pow.f64 im 6)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (*.f64 (log1p.f64 (*.f64 1/2 (*.f64 im im))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 1/2 (*.f64 im im))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (*.f64 1/2 (*.f64 im im)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 im (sqrt.f64 1/2))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 1/8 (pow.f64 im 6))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 1/2 (*.f64 im im))) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 1/2 (*.f64 im im))) 3) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 1/2 (*.f64 im im) 1) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 1/2 (*.f64 im im) 1) 1 -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (fma.f64 1/2 (*.f64 im im) 1)) (pow.f64 (cbrt.f64 (fma.f64 1/2 (*.f64 im im) 1)) 2) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 1/2 (*.f64 im im) 1)) 2) (cbrt.f64 (fma.f64 1/2 (*.f64 im im) 1)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 1 (*.f64 im (sqrt.f64 1/2))) (hypot.f64 1 (*.f64 im (sqrt.f64 1/2))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 1/8 (pow.f64 im 6) 1) (/.f64 1 (+.f64 1 (fma.f64 1/4 (pow.f64 im 4) (*.f64 -1/2 (*.f64 im im))))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 1 (*.f64 1/4 (pow.f64 im 4))) (/.f64 1 (+.f64 1 (*.f64 -1/2 (*.f64 im im)))) -1))))) |
| 1× | egg-herbie |
| 956× | fma-def_binary64 |
| 622× | associate-+l+_binary64 |
| 588× | distribute-rgt-in_binary64 |
| 578× | distribute-lft-in_binary64 |
| 554× | associate-+r+_binary64 |
Useful iterations: 4 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 36 | 520 |
| 1 | 99 | 472 |
| 2 | 297 | 444 |
| 3 | 1201 | 426 |
| 4 | 4314 | 419 |
| 5 | 5491 | 419 |
| 6 | 6669 | 419 |
| 7 | 6946 | 419 |
| 8 | 7134 | 419 |
| 9 | 7356 | 419 |
| 10 | 7667 | 419 |
| 1× | node limit |
| Inputs |
|---|
(+.f64 1 (*.f64 1/2 (pow.f64 im 2))) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 -1/2 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 2))))) |
(+.f64 1 (+.f64 (*.f64 1/24 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 4))) (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 -1/2 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 2)))))) |
(+.f64 1 (+.f64 (*.f64 1/24 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 4))) (+.f64 (*.f64 1/2 (pow.f64 im 2)) (+.f64 (*.f64 -1/2 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 2))) (*.f64 -1/720 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 6))))))) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(cos.f64 re) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (pow.f64 im 2)) |
| Outputs |
|---|
(+.f64 1 (*.f64 1/2 (pow.f64 im 2))) |
(+.f64 1 (*.f64 1/2 (*.f64 im im))) |
(fma.f64 1/2 (*.f64 im im) 1) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 -1/2 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 2))))) |
(+.f64 1 (fma.f64 1/2 (*.f64 im im) (*.f64 -1/2 (*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (*.f64 re re))))) |
(+.f64 1 (fma.f64 -1/2 (*.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 re re)) (*.f64 1/2 (*.f64 im im)))) |
(*.f64 (+.f64 (*.f64 -1/2 (*.f64 re re)) 1) (fma.f64 1/2 (*.f64 im im) 1)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (fma.f64 -1/2 (*.f64 re re) 1)) |
(+.f64 1 (+.f64 (*.f64 1/24 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 4))) (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 -1/2 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 2)))))) |
(+.f64 1 (fma.f64 1/24 (*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (pow.f64 re 4)) (fma.f64 1/2 (*.f64 im im) (*.f64 -1/2 (*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (*.f64 re re)))))) |
(+.f64 1 (fma.f64 1/24 (*.f64 (fma.f64 1/2 (*.f64 im im) 1) (pow.f64 re 4)) (fma.f64 -1/2 (*.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 re re)) (*.f64 1/2 (*.f64 im im))))) |
(+.f64 1 (fma.f64 1/2 (*.f64 im im) (*.f64 (fma.f64 1/2 (*.f64 im im) 1) (+.f64 (*.f64 -1/2 (*.f64 re re)) (*.f64 1/24 (pow.f64 re 4)))))) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (+.f64 (fma.f64 -1/2 (*.f64 re re) 1) (*.f64 1/24 (pow.f64 re 4)))) |
(+.f64 1 (+.f64 (*.f64 1/24 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 4))) (+.f64 (*.f64 1/2 (pow.f64 im 2)) (+.f64 (*.f64 -1/2 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 2))) (*.f64 -1/720 (*.f64 (+.f64 1 (*.f64 1/2 (pow.f64 im 2))) (pow.f64 re 6))))))) |
(+.f64 1 (fma.f64 1/24 (*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (pow.f64 re 4)) (fma.f64 1/2 (*.f64 im im) (fma.f64 -1/2 (*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (*.f64 re re)) (*.f64 -1/720 (*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (pow.f64 re 6))))))) |
(+.f64 1 (fma.f64 1/24 (*.f64 (fma.f64 1/2 (*.f64 im im) 1) (pow.f64 re 4)) (fma.f64 1/2 (*.f64 im im) (fma.f64 -1/2 (*.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 re re)) (*.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 (pow.f64 re 6) -1/720)))))) |
(+.f64 (*.f64 (+.f64 (*.f64 -1/2 (*.f64 re re)) 1) (fma.f64 1/2 (*.f64 im im) 1)) (*.f64 (fma.f64 1/2 (*.f64 im im) 1) (+.f64 (*.f64 -1/720 (pow.f64 re 6)) (*.f64 1/24 (pow.f64 re 4))))) |
(fma.f64 (pow.f64 re 4) (fma.f64 (*.f64 im im) 1/48 1/24) (*.f64 (fma.f64 1/2 (*.f64 im im) 1) (+.f64 (fma.f64 -1/2 (*.f64 re re) 1) (*.f64 -1/720 (pow.f64 re 6))))) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (+.f64 (fma.f64 -1/2 (*.f64 re re) 1) (fma.f64 -1/720 (pow.f64 re 6) (*.f64 1/24 (pow.f64 re 4))))) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (pow.f64 im 2)))) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(cos.f64 re) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(+.f64 (*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) (cos.f64 re)) |
(*.f64 (+.f64 1 (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (fma.f64 1/2 (*.f64 im im) 1) (cos.f64 re)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
Compiled 25 to 9 computations (64% saved)
Found 3 expressions with local error:
| New | Error | Program |
|---|---|---|
| 0.0b | (*.f64 1/2 (*.f64 im im)) | |
| ✓ | 0.0b | (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4)))) |
| ✓ | 0.1b | (*.f64 1/24 (pow.f64 im 4)) |
Compiled 62 to 41 computations (33.9% saved)
6 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 1.0ms | im | @ | 0 | (*.f64 1/24 (pow.f64 im 4)) |
| 1.0ms | im | @ | inf | (*.f64 1/24 (pow.f64 im 4)) |
| 0.0ms | im | @ | inf | (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4)))) |
| 0.0ms | im | @ | -inf | (*.f64 1/24 (pow.f64 im 4)) |
| 0.0ms | im | @ | 0 | (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4)))) |
| 1× | batch-egg-rewrite |
| 596× | fma-def_binary64 |
| 517× | log-prod_binary64 |
| 355× | pow-prod-down_binary64 |
| 304× | pow2_binary64 |
| 276× | fma-neg_binary64 |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 12 | 24 |
| 1 | 263 | 22 |
| 2 | 3271 | 22 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 1/24 (pow.f64 im 4)) |
(+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4)))) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 1/24 (pow.f64 im 4)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 1/24) (pow.f64 im 4))) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 1/24) (pow.f64 im 4)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 1/24) (pow.f64 im 4)))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 1/24) (pow.f64 im 4)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 1/24 (pow.f64 im 4)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (pow.f64 im 8) 1/576) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 1/24 (pow.f64 im 4))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 im im) (sqrt.f64 1/24)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (pow.f64 im 12) 1/13824) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (pow.f64 im 8) 1/576))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 1/24) (pow.f64 im 4)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 1/24 (pow.f64 im 4)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 im 12) 1/13824))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 1/24 (pow.f64 im 4))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (*.f64 (log1p.f64 (*.f64 1/24 (pow.f64 im 4))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 1/24 (pow.f64 im 4))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (fma.f64 4 (log.f64 im) (log.f64 1/24)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (fma.f64 4 (log.f64 im) (log.f64 1/24)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 1/24 (pow.f64 im 4) 1) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 1 -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) (pow.f64 (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) 2) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) 2) (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) (sqrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 (pow.f64 im 12) 1/13824 1) (/.f64 1 (+.f64 1 (fma.f64 (pow.f64 im 8) 1/576 (*.f64 -1/24 (pow.f64 im 4))))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 1 (*.f64 (pow.f64 im 8) 1/576)) (/.f64 1 (+.f64 1 (*.f64 -1/24 (pow.f64 im 4)))) -1))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (*.f64 (pow.f64 im 4) 1/4) (-.f64 (*.f64 1/2 (*.f64 im im)) (fma.f64 1/24 (pow.f64 im 4) 1))) (/.f64 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 2) (-.f64 (*.f64 1/2 (*.f64 im im)) (fma.f64 1/24 (pow.f64 im 4) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))) (pow.f64 (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))) 2) (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))) (sqrt.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 (pow.f64 im 6) 1/8 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 3)) (/.f64 1 (fma.f64 (pow.f64 im 4) 1/4 (*.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (-.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (*.f64 1/2 (*.f64 im im)))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (*.f64 (pow.f64 im 4) 1/4) (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 2)) (/.f64 1 (-.f64 (*.f64 1/2 (*.f64 im im)) (fma.f64 1/24 (pow.f64 im 4) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 (pow.f64 im 4) 1/4 (*.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (-.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (*.f64 1/2 (*.f64 im im))))) (fma.f64 (pow.f64 im 6) 1/8 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (*.f64 1/2 (*.f64 im im)) (fma.f64 1/24 (pow.f64 im 4) 1)) (-.f64 (*.f64 (pow.f64 im 4) 1/4) (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 (pow.f64 im 6) 1/8 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 3)) (fma.f64 (pow.f64 im 4) 1/4 (*.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (-.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (*.f64 1/2 (*.f64 im im))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 (pow.f64 im 6) 1/8 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 3)) (+.f64 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 2) (-.f64 (*.f64 (pow.f64 im 4) 1/4) (*.f64 1/2 (*.f64 (*.f64 im im) (fma.f64 1/24 (pow.f64 im 4) 1))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (pow.f64 im 4) 1/4) (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 2)) (-.f64 (*.f64 1/2 (*.f64 im im)) (fma.f64 1/24 (pow.f64 im 4) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (fma.f64 (pow.f64 im 6) 1/8 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 3))) (neg.f64 (fma.f64 (pow.f64 im 4) 1/4 (*.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (-.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (*.f64 1/2 (*.f64 im im)))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (*.f64 (pow.f64 im 4) 1/4) (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 2))) (neg.f64 (-.f64 (*.f64 1/2 (*.f64 im im)) (fma.f64 1/24 (pow.f64 im 4) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (fma.f64 1/2 (*.f64 im im) 1) 3) (*.f64 (pow.f64 im 12) 1/13824)) (+.f64 (pow.f64 (fma.f64 1/2 (*.f64 im im) 1) 2) (-.f64 (*.f64 (pow.f64 im 8) 1/576) (*.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 1/24 (pow.f64 im 4))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 2) (*.f64 (pow.f64 im 4) 1/4)) (-.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (*.f64 1/2 (*.f64 im im))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (fma.f64 1/2 (*.f64 im im) 1) 2) (*.f64 (pow.f64 im 8) 1/576)) (-.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 1/24 (pow.f64 im 4))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (fma.f64 (pow.f64 im 4) 1/4 (*.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (-.f64 (fma.f64 1/24 (pow.f64 im 4) 1) (*.f64 1/2 (*.f64 im im))))) (fma.f64 (pow.f64 im 6) 1/8 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 3))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (-.f64 (*.f64 1/2 (*.f64 im im)) (fma.f64 1/24 (pow.f64 im 4) 1)) (-.f64 (*.f64 (pow.f64 im 4) 1/4) (pow.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 2))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (exp.f64 1/24) (pow.f64 im 4)) (exp.f64 (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 1/24 (pow.f64 im 4)))) (exp.f64 (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 im im)))) (exp.f64 (fma.f64 1/24 (pow.f64 im 4) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (sqrt.f64 (pow.f64 (exp.f64 im) im)) (+.f64 1 (expm1.f64 (fma.f64 1/24 (pow.f64 im 4) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 im im)))) (+.f64 1 (expm1.f64 (fma.f64 1/24 (pow.f64 im 4) 1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (fma.f64 1/24 (pow.f64 im 4) 1))) (sqrt.f64 (pow.f64 (exp.f64 im) im))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 im im))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (fma.f64 1/24 (pow.f64 im 4) 1))) (+.f64 1 (expm1.f64 (*.f64 1/2 (*.f64 im im))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (fma.f64 1/2 (*.f64 im im) 1)) (+.f64 1 (expm1.f64 (*.f64 1/24 (pow.f64 im 4))))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log1p.f64 (fma.f64 1/24 (pow.f64 im 4) (*.f64 1/2 (*.f64 im im)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log1p.f64 (fma.f64 1/24 (pow.f64 im 4) (*.f64 1/2 (*.f64 im im)))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 im (*.f64 im 1/2) (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 im 4) 1/24 (fma.f64 1/2 (*.f64 im im) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/24 (pow.f64 im 4)) 1 (fma.f64 1/2 (*.f64 im im) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1/2 (*.f64 im im) (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im im) 1/2 (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im im) (*.f64 (*.f64 im im) 1/24) (fma.f64 1/2 (*.f64 im im) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 im im)) 1 (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 1/24 (pow.f64 im 4)) (fma.f64 1/2 (*.f64 im im) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 1/2 (*.f64 im im)) (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 1/24 (pow.f64 im 4) 1) (*.f64 1/2 (*.f64 im im)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 1/24 (pow.f64 im 4)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 1/24 (pow.f64 im 4) 1) 1 (*.f64 1/2 (*.f64 im im)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) (pow.f64 (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) 2) (*.f64 1/2 (*.f64 im im)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) 2) (cbrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) (*.f64 1/2 (*.f64 im im)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cbrt.f64 im) im) (*.f64 (pow.f64 (cbrt.f64 im) 2) 1/2) (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 im) 8) (*.f64 (*.f64 (cbrt.f64 im) im) 1/24) (fma.f64 1/2 (*.f64 im im) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 1/2 (*.f64 im im))) (cbrt.f64 (*.f64 (pow.f64 im 4) 1/4)) (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 (pow.f64 im 4) 1/4)) (cbrt.f64 (*.f64 1/2 (*.f64 im im))) (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 1/24 (pow.f64 im 4))) (cbrt.f64 (*.f64 (pow.f64 im 8) 1/576)) (fma.f64 1/2 (*.f64 im im) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 (pow.f64 im 8) 1/576)) (cbrt.f64 (*.f64 1/24 (pow.f64 im 4))) (fma.f64 1/2 (*.f64 im im) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) (sqrt.f64 (fma.f64 1/24 (pow.f64 im 4) 1)) (*.f64 1/2 (*.f64 im im)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im (sqrt.f64 1/2)) (*.f64 im (sqrt.f64 1/2)) (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 im im) (sqrt.f64 1/24)) (*.f64 (*.f64 im im) (sqrt.f64 1/24)) (fma.f64 1/2 (*.f64 im im) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 (pow.f64 im 12) 1/13824 1) (/.f64 1 (+.f64 1 (fma.f64 (pow.f64 im 8) 1/576 (*.f64 -1/24 (pow.f64 im 4))))) (*.f64 1/2 (*.f64 im im)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 1 (*.f64 (pow.f64 im 8) 1/576)) (/.f64 1 (+.f64 1 (*.f64 -1/24 (pow.f64 im 4)))) (*.f64 1/2 (*.f64 im im)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 im 1/2) im (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 1/2 (*.f64 im im) 1) 1 (*.f64 1/24 (pow.f64 im 4)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 1/2 (*.f64 im im) 1)) 2) (cbrt.f64 (fma.f64 1/2 (*.f64 im im) 1)) (*.f64 1/24 (pow.f64 im 4)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 1 (*.f64 im (sqrt.f64 1/2))) (hypot.f64 1 (*.f64 im (sqrt.f64 1/2))) (*.f64 1/24 (pow.f64 im 4)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/2 (*.f64 (cbrt.f64 im) im)) (pow.f64 (cbrt.f64 im) 2) (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 im 1/2) 1) im (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 im 1/2) (pow.f64 (cbrt.f64 im) 2)) (cbrt.f64 im) (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 im 1/2) (sqrt.f64 im)) (sqrt.f64 im) (fma.f64 1/24 (pow.f64 im 4) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/24 (*.f64 im im)) (*.f64 im im) (fma.f64 1/2 (*.f64 im im) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 1/24 (pow.f64 (cbrt.f64 im) 8)) (*.f64 (cbrt.f64 im) im) (fma.f64 1/2 (*.f64 im im) 1)))))) |
| 1× | egg-herbie |
| 1057× | sqr-pow_binary64 |
| 747× | fma-def_binary64 |
| 506× | pow-sqr_binary64 |
| 443× | cube-prod_binary64 |
| 412× | associate-*l*_binary64 |
Useful iterations: 2 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 14 | 155 |
| 1 | 29 | 153 |
| 2 | 57 | 141 |
| 3 | 145 | 141 |
| 4 | 421 | 141 |
| 5 | 1517 | 141 |
| 6 | 2881 | 141 |
| 7 | 3361 | 141 |
| 8 | 3536 | 141 |
| 9 | 3735 | 141 |
| 10 | 4008 | 141 |
| 11 | 4367 | 141 |
| 12 | 4818 | 141 |
| 13 | 5347 | 141 |
| 14 | 5975 | 141 |
| 15 | 6726 | 141 |
| 16 | 7038 | 141 |
| 17 | 7264 | 141 |
| 18 | 7462 | 141 |
| 19 | 7520 | 141 |
| 20 | 7542 | 141 |
| 1× | node limit |
| Inputs |
|---|
1 |
(+.f64 1 (*.f64 1/2 (pow.f64 im 2))) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(*.f64 1/24 (pow.f64 im 4)) |
(+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4))) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(*.f64 1/24 (pow.f64 im 4)) |
(+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4))) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
| Outputs |
|---|
1 |
(+.f64 1 (*.f64 1/2 (pow.f64 im 2))) |
(+.f64 1 (*.f64 1/2 (*.f64 im im))) |
(fma.f64 1/2 (*.f64 im im) 1) |
(fma.f64 im (*.f64 1/2 im) 1) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 1 (fma.f64 1/2 (*.f64 im im) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 1/24 (pow.f64 im 4))) |
(fma.f64 1/2 (*.f64 im im) (fma.f64 1/24 (pow.f64 im 4) 1)) |
(fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) |
(fma.f64 im (fma.f64 1/24 (pow.f64 im 3) (*.f64 1/2 im)) 1) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 1 (fma.f64 1/2 (*.f64 im im) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 1/24 (pow.f64 im 4))) |
(fma.f64 1/2 (*.f64 im im) (fma.f64 1/24 (pow.f64 im 4) 1)) |
(fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) |
(fma.f64 im (fma.f64 1/24 (pow.f64 im 3) (*.f64 1/2 im)) 1) |
(*.f64 1/24 (pow.f64 im 4)) |
(+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4))) |
(fma.f64 1/2 (*.f64 im im) (*.f64 1/24 (pow.f64 im 4))) |
(*.f64 (*.f64 im im) (fma.f64 im (*.f64 im 1/24) 1/2)) |
(*.f64 im (fma.f64 1/24 (pow.f64 im 3) (*.f64 1/2 im))) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 1 (fma.f64 1/2 (*.f64 im im) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 1/24 (pow.f64 im 4))) |
(fma.f64 1/2 (*.f64 im im) (fma.f64 1/24 (pow.f64 im 4) 1)) |
(fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) |
(fma.f64 im (fma.f64 1/24 (pow.f64 im 3) (*.f64 1/2 im)) 1) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 1 (fma.f64 1/2 (*.f64 im im) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 1/24 (pow.f64 im 4))) |
(fma.f64 1/2 (*.f64 im im) (fma.f64 1/24 (pow.f64 im 4) 1)) |
(fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) |
(fma.f64 im (fma.f64 1/24 (pow.f64 im 3) (*.f64 1/2 im)) 1) |
(*.f64 1/24 (pow.f64 im 4)) |
(+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4))) |
(fma.f64 1/2 (*.f64 im im) (*.f64 1/24 (pow.f64 im 4))) |
(*.f64 (*.f64 im im) (fma.f64 im (*.f64 im 1/24) 1/2)) |
(*.f64 im (fma.f64 1/24 (pow.f64 im 3) (*.f64 1/2 im))) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 1 (fma.f64 1/2 (*.f64 im im) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 1/24 (pow.f64 im 4))) |
(fma.f64 1/2 (*.f64 im im) (fma.f64 1/24 (pow.f64 im 4) 1)) |
(fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) |
(fma.f64 im (fma.f64 1/24 (pow.f64 im 3) (*.f64 1/2 im)) 1) |
(+.f64 1 (+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 1 (fma.f64 1/2 (*.f64 im im) (*.f64 1/24 (pow.f64 im 4)))) |
(+.f64 (fma.f64 1/2 (*.f64 im im) 1) (*.f64 1/24 (pow.f64 im 4))) |
(fma.f64 1/2 (*.f64 im im) (fma.f64 1/24 (pow.f64 im 4) 1)) |
(fma.f64 1/24 (pow.f64 im 4) (fma.f64 1/2 (*.f64 im im) 1)) |
(fma.f64 im (fma.f64 1/24 (pow.f64 im 3) (*.f64 1/2 im)) 1) |
Compiled 5992 to 3724 computations (37.9% saved)
8 alts after pruning (3 fresh and 5 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 308 | 3 | 311 |
| Fresh | 0 | 0 | 0 |
| Picked | 0 | 1 | 1 |
| Done | 1 | 4 | 5 |
| Total | 309 | 8 | 317 |
| Status | Error | Program |
|---|---|---|
| ✓ | 25.9b | (*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
| ▶ | 0.8b | (+.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
| ✓ | 0.6b | (*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4))))) |
| ▶ | 26.6b | (fma.f64 1/2 (*.f64 im im) 1) |
| ✓ | 0.8b | (*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
| ✓ | 1.2b | (cos.f64 re) |
| ✓ | 0.0b | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| ▶ | 0b | (+.f64 (*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im))) |
Compiled 95 to 69 computations (27.4% saved)
Found 2 expressions with local error:
| New | Error | Program |
|---|---|---|
| 0.0b | (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im)) | |
| ✓ | 0.0b | (/.f64 (cos.f64 re) (exp.f64 im)) |
Compiled 47 to 19 computations (59.6% saved)
6 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 1.0ms | re | @ | 0 | (/.f64 (cos.f64 re) (exp.f64 im)) |
| 1.0ms | im | @ | -inf | (/.f64 (cos.f64 re) (exp.f64 im)) |
| 1.0ms | im | @ | 0 | (/.f64 (cos.f64 re) (exp.f64 im)) |
| 1.0ms | re | @ | inf | (/.f64 (cos.f64 re) (exp.f64 im)) |
| 1.0ms | im | @ | inf | (/.f64 (cos.f64 re) (exp.f64 im)) |
| 1× | batch-egg-rewrite |
| 623× | pow1_binary64 |
| 573× | add-log-exp_binary64 |
| 573× | log1p-expm1-u_binary64 |
| 573× | expm1-log1p-u_binary64 |
| 559× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 6 | 8 |
| 1 | 119 | 8 |
| 2 | 1529 | 8 |
| 1× | node limit |
| Inputs |
|---|
(/.f64 (cos.f64 re) (exp.f64 im)) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (/.f64 (cos.f64 re) (exp.f64 im))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cos.f64 re) (exp.f64 (neg.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (cos.f64 re) (exp.f64 im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (/.f64 (cos.f64 re) (exp.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (/.f64 (cos.f64 re) (exp.f64 im))) (pow.f64 (cbrt.f64 (/.f64 (cos.f64 re) (exp.f64 im))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (/.f64 (cos.f64 re) (exp.f64 im))) 2) (cbrt.f64 (/.f64 (cos.f64 re) (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cos.f64 re)) 2) (*.f64 (cbrt.f64 (cos.f64 re)) (exp.f64 (neg.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (/.f64 (cos.f64 re) (exp.f64 im))) (sqrt.f64 (/.f64 (cos.f64 re) (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (cos.f64 re)) (*.f64 (sqrt.f64 (cos.f64 re)) (exp.f64 (neg.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (neg.f64 (cos.f64 re)) (/.f64 1 (neg.f64 (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (exp.f64 (neg.f64 im)) (cos.f64 re))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (pow.f64 (cbrt.f64 (cos.f64 re)) 2) 1) (/.f64 (cbrt.f64 (cos.f64 re)) (exp.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (sqrt.f64 (cos.f64 re)) 1) (/.f64 (sqrt.f64 (cos.f64 re)) (exp.f64 im)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (pow.f64 (cbrt.f64 (exp.f64 im)) 2)) (/.f64 (cos.f64 re) (cbrt.f64 (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (pow.f64 (cbrt.f64 (cos.f64 re)) 2) (pow.f64 (cbrt.f64 (exp.f64 im)) 2)) (cbrt.f64 (/.f64 (cos.f64 re) (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (sqrt.f64 (cos.f64 re)) (pow.f64 (cbrt.f64 (exp.f64 im)) 2)) (/.f64 (sqrt.f64 (cos.f64 re)) (cbrt.f64 (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (sqrt.f64 (exp.f64 im))) (/.f64 (cos.f64 re) (sqrt.f64 (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (pow.f64 (cbrt.f64 (cos.f64 re)) 2) (sqrt.f64 (exp.f64 im))) (/.f64 (cbrt.f64 (cos.f64 re)) (sqrt.f64 (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (cos.f64 re) (exp.f64 im)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (/.f64 (cos.f64 re) (exp.f64 im)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (/.f64 (cos.f64 re) (exp.f64 im))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (/.f64 (cos.f64 re) (exp.f64 im))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (exp.f64 im) (cos.f64 re)) -1)))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (/.f64 (cos.f64 re) (neg.f64 (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (/.f64 (cos.f64 re) (exp.f64 im)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (/.f64 (cos.f64 re) (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (/.f64 (cos.f64 re) (exp.f64 im)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (/.f64 (cos.f64 re) (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (/.f64 (cos.f64 re) (exp.f64 im))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (-.f64 (log.f64 (cos.f64 re)) im)))))) |
| 1× | egg-herbie |
| 846× | fma-neg_binary64 |
| 686× | distribute-rgt-in_binary64 |
| 623× | distribute-lft-in_binary64 |
| 314× | associate--l+_binary64 |
| 313× | fma-def_binary64 |
Useful iterations: 3 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 54 | 193 |
| 1 | 155 | 176 |
| 2 | 461 | 167 |
| 3 | 2361 | 157 |
| 1× | node limit |
| Inputs |
|---|
(/.f64 1 (exp.f64 im)) |
(+.f64 (/.f64 1 (exp.f64 im)) (*.f64 -1/2 (/.f64 (pow.f64 re 2) (exp.f64 im)))) |
(+.f64 (/.f64 1 (exp.f64 im)) (+.f64 (*.f64 -1/2 (/.f64 (pow.f64 re 2) (exp.f64 im))) (*.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im))))) |
(+.f64 (/.f64 1 (exp.f64 im)) (+.f64 (*.f64 -1/2 (/.f64 (pow.f64 re 2) (exp.f64 im))) (+.f64 (*.f64 -1/720 (/.f64 (pow.f64 re 6) (exp.f64 im))) (*.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im)))))) |
(cos.f64 re) |
(+.f64 (*.f64 -1 (*.f64 (cos.f64 re) im)) (cos.f64 re)) |
(+.f64 (*.f64 -1 (*.f64 (cos.f64 re) im)) (+.f64 (cos.f64 re) (*.f64 -1 (*.f64 (+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1 (cos.f64 re))) (pow.f64 im 2))))) |
(+.f64 (*.f64 -1 (*.f64 (cos.f64 re) im)) (+.f64 (cos.f64 re) (+.f64 (*.f64 -1 (*.f64 (+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1 (cos.f64 re))) (pow.f64 im 2))) (*.f64 -1 (*.f64 (+.f64 (*.f64 -1 (+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1 (cos.f64 re)))) (+.f64 (*.f64 1/6 (cos.f64 re)) (*.f64 -1/2 (cos.f64 re)))) (pow.f64 im 3)))))) |
| Outputs |
|---|
(/.f64 1 (exp.f64 im)) |
(exp.f64 (neg.f64 im)) |
(+.f64 (/.f64 1 (exp.f64 im)) (*.f64 -1/2 (/.f64 (pow.f64 re 2) (exp.f64 im)))) |
(+.f64 (exp.f64 (neg.f64 im)) (*.f64 -1/2 (/.f64 (*.f64 re re) (exp.f64 im)))) |
(fma.f64 -1/2 (/.f64 (*.f64 re re) (exp.f64 im)) (exp.f64 (neg.f64 im))) |
(fma.f64 -1/2 (/.f64 re (/.f64 (exp.f64 im) re)) (exp.f64 (neg.f64 im))) |
(+.f64 (/.f64 1 (exp.f64 im)) (+.f64 (*.f64 -1/2 (/.f64 (pow.f64 re 2) (exp.f64 im))) (*.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im))))) |
(+.f64 (exp.f64 (neg.f64 im)) (fma.f64 -1/2 (/.f64 (*.f64 re re) (exp.f64 im)) (*.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im))))) |
(+.f64 (exp.f64 (neg.f64 im)) (fma.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im)) (*.f64 -1/2 (/.f64 (*.f64 re re) (exp.f64 im))))) |
(fma.f64 -1/2 (/.f64 re (/.f64 (exp.f64 im) re)) (fma.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im)) (exp.f64 (neg.f64 im)))) |
(+.f64 (/.f64 1 (exp.f64 im)) (+.f64 (*.f64 -1/2 (/.f64 (pow.f64 re 2) (exp.f64 im))) (+.f64 (*.f64 -1/720 (/.f64 (pow.f64 re 6) (exp.f64 im))) (*.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im)))))) |
(+.f64 (exp.f64 (neg.f64 im)) (fma.f64 -1/2 (/.f64 (*.f64 re re) (exp.f64 im)) (fma.f64 -1/720 (/.f64 (pow.f64 re 6) (exp.f64 im)) (*.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im)))))) |
(+.f64 (fma.f64 -1/2 (/.f64 (*.f64 re re) (exp.f64 im)) (exp.f64 (neg.f64 im))) (fma.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im)) (/.f64 -1/720 (/.f64 (exp.f64 im) (pow.f64 re 6))))) |
(+.f64 (fma.f64 -1/2 (/.f64 re (/.f64 (exp.f64 im) re)) (exp.f64 (neg.f64 im))) (fma.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im)) (*.f64 (/.f64 -1/720 (exp.f64 im)) (pow.f64 re 6)))) |
(+.f64 (exp.f64 (neg.f64 im)) (fma.f64 1/24 (/.f64 (pow.f64 re 4) (exp.f64 im)) (fma.f64 -1/2 (/.f64 re (/.f64 (exp.f64 im) re)) (*.f64 (/.f64 -1/720 (exp.f64 im)) (pow.f64 re 6))))) |
(cos.f64 re) |
(+.f64 (*.f64 -1 (*.f64 (cos.f64 re) im)) (cos.f64 re)) |
(fma.f64 -1 (*.f64 im (cos.f64 re)) (cos.f64 re)) |
(-.f64 (cos.f64 re) (*.f64 im (cos.f64 re))) |
(*.f64 (cos.f64 re) (-.f64 1 im)) |
(+.f64 (*.f64 -1 (*.f64 (cos.f64 re) im)) (+.f64 (cos.f64 re) (*.f64 -1 (*.f64 (+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1 (cos.f64 re))) (pow.f64 im 2))))) |
(+.f64 (fma.f64 -1 (*.f64 im (cos.f64 re)) (cos.f64 re)) (neg.f64 (*.f64 (*.f64 -1/2 (cos.f64 re)) (*.f64 im im)))) |
(-.f64 (fma.f64 (*.f64 (cos.f64 re) 1/2) (*.f64 im im) (cos.f64 re)) (*.f64 im (cos.f64 re))) |
(-.f64 (fma.f64 (*.f64 (cos.f64 re) (*.f64 1/2 im)) im (cos.f64 re)) (*.f64 im (cos.f64 re))) |
(*.f64 (cos.f64 re) (-.f64 (+.f64 (neg.f64 im) 1) (*.f64 im (*.f64 im -1/2)))) |
(+.f64 (*.f64 -1 (*.f64 (cos.f64 re) im)) (+.f64 (cos.f64 re) (+.f64 (*.f64 -1 (*.f64 (+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1 (cos.f64 re))) (pow.f64 im 2))) (*.f64 -1 (*.f64 (+.f64 (*.f64 -1 (+.f64 (*.f64 1/2 (cos.f64 re)) (*.f64 -1 (cos.f64 re)))) (+.f64 (*.f64 1/6 (cos.f64 re)) (*.f64 -1/2 (cos.f64 re)))) (pow.f64 im 3)))))) |
(+.f64 (fma.f64 -1 (*.f64 im (cos.f64 re)) (cos.f64 re)) (fma.f64 -1 (*.f64 (*.f64 -1/2 (cos.f64 re)) (*.f64 im im)) (neg.f64 (*.f64 (fma.f64 -1 (*.f64 -1/2 (cos.f64 re)) (*.f64 (cos.f64 re) -1/3)) (pow.f64 im 3))))) |
(-.f64 (-.f64 (fma.f64 (*.f64 (cos.f64 re) 1/2) (*.f64 im im) (cos.f64 re)) (*.f64 (fma.f64 (cos.f64 re) -1/3 (*.f64 (cos.f64 re) 1/2)) (pow.f64 im 3))) (*.f64 im (cos.f64 re))) |
(+.f64 (-.f64 (cos.f64 re) (*.f64 im (cos.f64 re))) (*.f64 (*.f64 im im) (-.f64 (*.f64 (cos.f64 re) 1/2) (*.f64 im (*.f64 (cos.f64 re) 1/6))))) |
(+.f64 (cos.f64 re) (*.f64 im (-.f64 (*.f64 im (fma.f64 (cos.f64 re) 1/2 (*.f64 im (*.f64 (cos.f64 re) -1/6)))) (cos.f64 re)))) |
Found 2 expressions with local error:
| New | Error | Program |
|---|---|---|
| 0.0b | (*.f64 1/2 (*.f64 im im)) | |
| ✓ | 0.1b | (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) |
Compiled 34 to 14 computations (58.8% saved)
6 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 4.0ms | re | @ | 0 | (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) |
| 1.0ms | re | @ | inf | (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) |
| 1.0ms | re | @ | -inf | (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) |
| 1.0ms | im | @ | inf | (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) |
| 0.0ms | im | @ | 0 | (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) |
| 1× | batch-egg-rewrite |
| 739× | pow1_binary64 |
| 680× | add-log-exp_binary64 |
| 680× | log1p-expm1-u_binary64 |
| 680× | expm1-log1p-u_binary64 |
| 665× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 8 | 12 |
| 1 | 162 | 12 |
| 2 | 1897 | 12 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (*.f64 (cos.f64 re) (*.f64 im im)) 1/2)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 (cos.f64 re) (*.f64 im im)) 1/2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (*.f64 (cos.f64 re) (*.f64 im im)) 1/2) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (*.f64 (cos.f64 re) (*.f64 im im)) 1/2)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sqrt.f64 (*.f64 (cos.f64 re) 1/2)) im) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (*.f64 (cos.f64 re) (*.f64 im im)) 1/2) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (pow.f64 (pow.f64 (exp.f64 im) im) 1/2) (cos.f64 re)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (*.f64 (cos.f64 re) (*.f64 im im)) 1/2) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (cos.f64 re) 3) (pow.f64 (*.f64 1/2 (*.f64 im im)) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 1/2 (*.f64 im im)) 3) (pow.f64 (cos.f64 re) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (*.f64 (cos.f64 re) (*.f64 im im)) 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (*.f64 (cos.f64 re) (*.f64 im im)) 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (*.f64 (cos.f64 re) (*.f64 im im)) 1/2))))))) |
| 1× | egg-herbie |
| 840× | unswap-sqr_binary64 |
| 740× | fma-def_binary64 |
| 578× | distribute-rgt-in_binary64 |
| 540× | sqr-pow_binary64 |
| 456× | distribute-lft-in_binary64 |
Useful iterations: 3 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 28 | 346 |
| 1 | 71 | 332 |
| 2 | 218 | 314 |
| 3 | 898 | 310 |
| 4 | 2450 | 310 |
| 5 | 4151 | 310 |
| 6 | 4417 | 310 |
| 7 | 4794 | 310 |
| 8 | 5404 | 310 |
| 9 | 6460 | 310 |
| 10 | 6771 | 310 |
| 11 | 7136 | 310 |
| 12 | 7588 | 310 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 1/2 (pow.f64 im 2)) |
(+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (pow.f64 im 2)))) |
(+.f64 (*.f64 1/2 (pow.f64 im 2)) (+.f64 (*.f64 1/48 (*.f64 (pow.f64 re 4) (pow.f64 im 2))) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (pow.f64 im 2))))) |
(+.f64 (*.f64 -1/1440 (*.f64 (pow.f64 re 6) (pow.f64 im 2))) (+.f64 (*.f64 1/2 (pow.f64 im 2)) (+.f64 (*.f64 1/48 (*.f64 (pow.f64 re 4) (pow.f64 im 2))) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (pow.f64 im 2)))))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
| Outputs |
|---|
(*.f64 1/2 (pow.f64 im 2)) |
(*.f64 1/2 (*.f64 im im)) |
(+.f64 (*.f64 1/2 (pow.f64 im 2)) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (pow.f64 im 2)))) |
(fma.f64 1/2 (*.f64 im im) (*.f64 -1/4 (*.f64 (*.f64 im im) (*.f64 re re)))) |
(*.f64 (*.f64 im im) (+.f64 1/2 (*.f64 -1/4 (*.f64 re re)))) |
(*.f64 (*.f64 im im) (fma.f64 -1/4 (*.f64 re re) 1/2)) |
(*.f64 im (*.f64 im (fma.f64 -1/4 (*.f64 re re) 1/2))) |
(+.f64 (*.f64 1/2 (pow.f64 im 2)) (+.f64 (*.f64 1/48 (*.f64 (pow.f64 re 4) (pow.f64 im 2))) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (pow.f64 im 2))))) |
(fma.f64 1/2 (*.f64 im im) (fma.f64 1/48 (*.f64 (*.f64 im im) (pow.f64 re 4)) (*.f64 -1/4 (*.f64 (*.f64 im im) (*.f64 re re))))) |
(fma.f64 1/2 (*.f64 im im) (*.f64 (*.f64 im im) (+.f64 (*.f64 -1/4 (*.f64 re re)) (*.f64 1/48 (pow.f64 re 4))))) |
(*.f64 (*.f64 im im) (+.f64 1/2 (fma.f64 1/48 (pow.f64 re 4) (*.f64 -1/4 (*.f64 re re))))) |
(*.f64 (*.f64 im im) (fma.f64 -1/4 (*.f64 re re) (fma.f64 1/48 (pow.f64 re 4) 1/2))) |
(*.f64 im (*.f64 im (fma.f64 -1/4 (*.f64 re re) (fma.f64 1/48 (pow.f64 re 4) 1/2)))) |
(+.f64 (*.f64 -1/1440 (*.f64 (pow.f64 re 6) (pow.f64 im 2))) (+.f64 (*.f64 1/2 (pow.f64 im 2)) (+.f64 (*.f64 1/48 (*.f64 (pow.f64 re 4) (pow.f64 im 2))) (*.f64 -1/4 (*.f64 (pow.f64 re 2) (pow.f64 im 2)))))) |
(fma.f64 -1/1440 (*.f64 (*.f64 im im) (pow.f64 re 6)) (fma.f64 1/2 (*.f64 im im) (fma.f64 1/48 (*.f64 (*.f64 im im) (pow.f64 re 4)) (*.f64 -1/4 (*.f64 (*.f64 im im) (*.f64 re re)))))) |
(+.f64 (*.f64 (*.f64 im im) (+.f64 (*.f64 -1/4 (*.f64 re re)) (*.f64 1/48 (pow.f64 re 4)))) (*.f64 (*.f64 im im) (+.f64 (*.f64 -1/1440 (pow.f64 re 6)) 1/2))) |
(*.f64 (*.f64 im im) (+.f64 (fma.f64 1/48 (pow.f64 re 4) (*.f64 -1/4 (*.f64 re re))) (fma.f64 -1/1440 (pow.f64 re 6) 1/2))) |
(*.f64 (*.f64 im im) (fma.f64 (*.f64 re re) (fma.f64 (*.f64 re re) 1/48 -1/4) (fma.f64 -1/1440 (pow.f64 re 6) 1/2))) |
(*.f64 im (*.f64 im (fma.f64 (*.f64 re re) (fma.f64 (*.f64 re re) 1/48 -1/4) (fma.f64 -1/1440 (pow.f64 re 6) 1/2)))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
(*.f64 1/2 (*.f64 (cos.f64 re) (pow.f64 im 2))) |
(*.f64 1/2 (*.f64 (*.f64 im im) (cos.f64 re))) |
(*.f64 1/2 (*.f64 im (*.f64 im (cos.f64 re)))) |
(*.f64 (*.f64 im im) (*.f64 1/2 (cos.f64 re))) |
Compiled 14 to 8 computations (42.9% saved)
Compiled 2547 to 1322 computations (48.1% saved)
8 alts after pruning (0 fresh and 8 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 133 | 0 | 133 |
| Fresh | 0 | 0 | 0 |
| Picked | 0 | 1 | 1 |
| Done | 0 | 7 | 7 |
| Total | 133 | 8 | 141 |
| Status | Error | Program |
|---|---|---|
| ✓ | 25.9b | (*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
| ✓ | 0.8b | (+.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
| ✓ | 0.6b | (*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4))))) |
| ✓ | 26.6b | (fma.f64 1/2 (*.f64 im im) 1) |
| ✓ | 0.8b | (*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
| ✓ | 1.2b | (cos.f64 re) |
| ✓ | 0.0b | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| ✓ | 0b | (+.f64 (*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im))) |
Compiled 95 to 69 computations (27.4% saved)
| Inputs |
|---|
(cos.f64 re) |
(fma.f64 1/2 (*.f64 im im) 1) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
(*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
(+.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4))))) |
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
(+.f64 (*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im))) |
(+.f64 (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 (neg.f64 im))) (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im))) |
| Outputs |
|---|
(+.f64 (*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im))) |
8 calls:
| 6.0ms | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| 5.0ms | re |
| 5.0ms | im |
| 5.0ms | (*.f64 1/2 (cos.f64 re)) |
| 4.0ms | (*.f64 1/2 (cos.f64 re)) |
| Error | Segments | Branch |
|---|---|---|
| 0b | 1 | re |
| 0b | 1 | im |
| 0b | 1 | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| 0b | 1 | (*.f64 1/2 (cos.f64 re)) |
| 0b | 1 | (*.f64 1/2 (cos.f64 re)) |
| 0b | 1 | (cos.f64 re) |
| 0b | 1 | (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im)) |
| 0b | 1 | (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im)) |
Compiled 148 to 89 computations (39.9% saved)
| Inputs |
|---|
(cos.f64 re) |
(fma.f64 1/2 (*.f64 im im) 1) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
(*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
(+.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4))))) |
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| Outputs |
|---|
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
6 calls:
| 8.0ms | (cos.f64 re) |
| 5.0ms | im |
| 5.0ms | re |
| 5.0ms | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| 4.0ms | (*.f64 1/2 (cos.f64 re)) |
| Error | Segments | Branch |
|---|---|---|
| 0.0b | 1 | re |
| 0.0b | 1 | im |
| 0.0b | 1 | (*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
| 0.0b | 1 | (*.f64 1/2 (cos.f64 re)) |
| 0.0b | 1 | (cos.f64 re) |
| 0.0b | 1 | (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im)) |
Compiled 103 to 64 computations (37.9% saved)
| Inputs |
|---|
(cos.f64 re) |
(fma.f64 1/2 (*.f64 im im) 1) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
(*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
(+.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4))))) |
| Outputs |
|---|
(*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4))))) |
3 calls:
| 5.0ms | (cos.f64 re) |
| 5.0ms | re |
| 5.0ms | im |
| Error | Segments | Branch |
|---|---|---|
| 0.6b | 1 | re |
| 0.6b | 1 | im |
| 0.6b | 1 | (cos.f64 re) |
Compiled 65 to 39 computations (40% saved)
| Inputs |
|---|
(cos.f64 re) |
(fma.f64 1/2 (*.f64 im im) 1) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
(*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
(+.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
| Outputs |
|---|
(+.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
3 calls:
| 5.0ms | re |
| 4.0ms | im |
| 4.0ms | (cos.f64 re) |
| Error | Segments | Branch |
|---|---|---|
| 0.8b | 1 | re |
| 0.8b | 1 | im |
| 0.8b | 1 | (cos.f64 re) |
Compiled 49 to 29 computations (40.8% saved)
| Inputs |
|---|
(cos.f64 re) |
(fma.f64 1/2 (*.f64 im im) 1) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
(*.f64 1/2 (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
| Outputs |
|---|
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
3 calls:
| 4.0ms | re |
| 4.0ms | im |
| 3.0ms | (cos.f64 re) |
| Error | Segments | Branch |
|---|---|---|
| 0.8b | 1 | re |
| 0.8b | 1 | im |
| 0.8b | 1 | (cos.f64 re) |
Compiled 38 to 25 computations (34.2% saved)
Total -25.6b remaining (-2214.6%)
Threshold costs -25.6b (-2214.6%)
| Inputs |
|---|
(cos.f64 re) |
(fma.f64 1/2 (*.f64 im im) 1) |
| Outputs |
|---|
(cos.f64 re) |
3 calls:
| 4.0ms | im |
| 3.0ms | re |
| 3.0ms | (cos.f64 re) |
| Error | Segments | Branch |
|---|---|---|
| 1.2b | 1 | re |
| 1.2b | 1 | im |
| 1.2b | 1 | (cos.f64 re) |
Compiled 20 to 14 computations (30% saved)
| 1× | egg-herbie |
| 10× | *-commutative_binary64 |
| 7× | +-commutative_binary64 |
| 1× | sub-neg_binary64 |
| 1× | neg-sub0_binary64 |
| 1× | neg-mul-1_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 29 | 101 |
| 1 | 49 | 101 |
| 2 | 51 | 101 |
| 3 | 52 | 101 |
| 1× | done |
| 1× | saturated |
| Inputs |
|---|
(+.f64 (*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im))) |
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
(*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4))))) |
(+.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
(cos.f64 re) |
| Outputs |
|---|
(+.f64 (*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) (*.f64 (*.f64 1/2 (cos.f64 re)) (exp.f64 im))) |
(+.f64 (*.f64 1/2 (/.f64 (cos.f64 re) (exp.f64 im))) (*.f64 (exp.f64 im) (*.f64 1/2 (cos.f64 re)))) |
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 (neg.f64 im)) (exp.f64 im))) |
(*.f64 (*.f64 1/2 (cos.f64 re)) (+.f64 (exp.f64 im) (exp.f64 (neg.f64 im)))) |
(*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) (+.f64 1 (*.f64 1/24 (pow.f64 im 4))))) |
(+.f64 (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im))) (cos.f64 re)) |
(+.f64 (cos.f64 re) (*.f64 (cos.f64 re) (*.f64 1/2 (*.f64 im im)))) |
(*.f64 (cos.f64 re) (+.f64 1 (*.f64 1/2 (*.f64 im im)))) |
(*.f64 (cos.f64 re) (+.f64 (*.f64 1/2 (*.f64 im im)) 1)) |
(cos.f64 re) |
Compiled 77 to 55 computations (28.6% saved)
| 1× | egg-herbie |
| 734× | unswap-sqr_binary64 |
| 716× | distribute-lft-out_binary64 |
| 603× | associate-*r/_binary64 |
| 488× | fma-def_binary64 |
| 406× | *-commutative_binary64 |
Useful iterations: 4 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 76 | 767 |
| 1 | 214 | 709 |
| 2 | 588 | 662 |
| 3 | 2008 | 626 |
| 4 | 3643 | 622 |
| 5 | 6897 | 622 |
| 1× | node limit |
Compiled 60 to 48 computations (20% saved)
Compiled 67 to 37 computations (44.8% saved)
Loading profile data...