Time bar (total: 9.8s)
| 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 |
| 0% | 99.9% | 0.1% | 5 |
| 0% | 99.9% | 0.1% | 6 |
| 25% | 74.9% | 0.1% | 7 |
| 37.4% | 62.4% | 0.1% | 8 |
| 37.4% | 62.4% | 0.1% | 9 |
| 56.2% | 43.7% | 0.1% | 10 |
| 65.5% | 34.3% | 0.1% | 11 |
| 65.5% | 34.3% | 0.1% | 12 |
Compiled 13 to 9 computations (30.8% saved)
| 1.4s | 2072× | body | 1024 | valid |
| 1.3s | 5145× | body | 256 | valid |
| 488.0ms | 1033× | body | 512 | valid |
| 6.0ms | 6× | body | 2048 | valid |
| 2× | egg-herbie |
| 16× | fma-def_binary64 |
| 8× | *-commutative_binary64 |
| 4× | +-commutative_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 22 | 48 |
| 1 | 38 | 48 |
| 2 | 50 | 48 |
| 0 | 3 | 3 |
| 1× | saturated |
| 1× | saturated |
| Inputs |
|---|
0 |
1 |
2 |
| Outputs |
|---|
0 |
1 |
2 |
| Inputs |
|---|
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 y (sin.f64 x)) (*.f64 z (cos.f64 x))) |
(+.f64 (*.f64 z (sin.f64 y)) (*.f64 x (cos.f64 y))) |
(+.f64 (*.f64 x (sin.f64 z)) (*.f64 y (cos.f64 z))) |
| Outputs |
|---|
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 y (sin.f64 x)) (*.f64 z (cos.f64 x))) |
(fma.f64 y (sin.f64 x) (*.f64 z (cos.f64 x))) |
(+.f64 (*.f64 z (sin.f64 y)) (*.f64 x (cos.f64 y))) |
(fma.f64 z (sin.f64 y) (*.f64 x (cos.f64 y))) |
(fma.f64 x (cos.f64 y) (*.f64 (sin.f64 y) z)) |
(+.f64 (*.f64 x (sin.f64 z)) (*.f64 y (cos.f64 z))) |
(fma.f64 x (sin.f64 z) (*.f64 y (cos.f64 z))) |
Compiled 15 to 11 computations (26.7% saved)
| 1× | egg-herbie |
| 4× | fma-def_binary64 |
| 2× | *-commutative_binary64 |
| 1× | +-commutative_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 12 |
| 1 | 13 | 12 |
| 2 | 16 | 12 |
| 1× | saturated |
| Inputs |
|---|
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| Outputs |
|---|
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
Compiled 20 to 9 computations (55% saved)
3 alts after pruning (3 fresh and 0 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 0 | 2 | 2 |
| Fresh | 0 | 1 | 1 |
| Picked | 0 | 0 | 0 |
| Done | 0 | 0 | 0 |
| Total | 0 | 3 | 3 |
| Status | Error | Program |
|---|---|---|
| ▶ | 0.1b | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| ▶ | 0.1b | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
Compiled 23 to 15 computations (34.8% saved)
Found 3 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| ✓ | 0.1b | (*.f64 x (sin.f64 y)) |
| ✓ | 0.1b | (*.f64 z (cos.f64 y)) |
Compiled 27 to 8 computations (70.4% saved)
21 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 1.0ms | y | @ | 0 | (*.f64 x (sin.f64 y)) |
| 1.0ms | z | @ | 0 | (*.f64 z (cos.f64 y)) |
| 1.0ms | x | @ | 0 | (*.f64 x (sin.f64 y)) |
| 1.0ms | y | @ | 0 | (*.f64 z (cos.f64 y)) |
| 1.0ms | z | @ | inf | (*.f64 z (cos.f64 y)) |
| 1× | batch-egg-rewrite |
| 484× | log-prod_binary64 |
| 382× | prod-exp_binary64 |
| 361× | exp-prod_binary64 |
| 332× | pow-prod-down_binary64 |
| 325× | fma-def_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 24 |
| 1 | 187 | 24 |
| 2 | 2497 | 24 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 z (cos.f64 y)) |
(*.f64 x (sin.f64 y)) |
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 z) (cos.f64 y))) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 z) (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 z) (cos.f64 y)))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 z) (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 z (cos.f64 y)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 z (cos.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 z (cos.f64 y)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 z (cos.f64 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 z (cos.f64 y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 z (cos.f64 y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 1) (log.f64 (*.f64 z (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (pow.f64 (cbrt.f64 (log.f64 (*.f64 z (cos.f64 y)))) 2)) (cbrt.f64 (log.f64 (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (sqrt.f64 (log.f64 (*.f64 z (cos.f64 y))))) (sqrt.f64 (log.f64 (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 z (cos.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 z) (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 z (cos.f64 y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 z (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 z (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 z (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 z (cos.f64 y))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (*.f64 z (cos.f64 y)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (*.f64 z (cos.f64 y)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (*.f64 z (cos.f64 y)))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 z (cos.f64 y))) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 z (cos.f64 y))) 3) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (*.f64 (log.f64 z) 1) (log.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (log.f64 z) (*.f64 (log.f64 (cos.f64 y)) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (*.f64 (log.f64 z) 1) (*.f64 (log.f64 (cos.f64 y)) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (*.f64 (log.f64 (cos.f64 y)) 1) (log.f64 z)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (log.f64 (cos.f64 y)) (*.f64 (log.f64 z) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (*.f64 (log.f64 (cos.f64 y)) 1) (*.f64 (log.f64 z) 1))))))) |
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) (sin.f64 y))) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 x) (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 x) (sin.f64 y)))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 x) (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 x (sin.f64 y)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (sin.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 1) (log.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (pow.f64 (cbrt.f64 (log.f64 (*.f64 x (sin.f64 y)))) 2)) (cbrt.f64 (log.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (sqrt.f64 (log.f64 (*.f64 x (sin.f64 y))))) (sqrt.f64 (log.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 x) (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 x (sin.f64 y))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (*.f64 x (sin.f64 y)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (*.f64 x (sin.f64 y)))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 x (sin.f64 y))) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 x (sin.f64 y))) 3) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (*.f64 (log.f64 x) 1) (log.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (log.f64 x) (*.f64 (log.f64 (sin.f64 y)) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (*.f64 (log.f64 x) 1) (*.f64 (log.f64 (sin.f64 y)) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (*.f64 (log.f64 (sin.f64 y)) 1) (log.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (log.f64 (sin.f64 y)) (*.f64 (log.f64 x) 1)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (+.f64 (*.f64 (log.f64 (sin.f64 y)) 1) (*.f64 (log.f64 x) 1))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (-.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) (/.f64 (pow.f64 (*.f64 z (cos.f64 y)) 2) (-.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))) (pow.f64 (cbrt.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))) 2) (cbrt.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))) (sqrt.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3)) (/.f64 1 (fma.f64 (*.f64 z (cos.f64 y)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y))) (pow.f64 (*.f64 x (sin.f64 y)) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (pow.f64 (*.f64 z (cos.f64 y)) 2)) (/.f64 1 (-.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 (*.f64 z (cos.f64 y)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y))) (pow.f64 (*.f64 x (sin.f64 y)) 2)) (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (pow.f64 (*.f64 z (cos.f64 y)) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3)) (fma.f64 (*.f64 z (cos.f64 y)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y))) (pow.f64 (*.f64 x (sin.f64 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3)) (+.f64 (pow.f64 (*.f64 z (cos.f64 y)) 2) (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (pow.f64 (*.f64 z (cos.f64 y)) 2)) (-.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3))) (neg.f64 (fma.f64 (*.f64 z (cos.f64 y)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y))) (pow.f64 (*.f64 x (sin.f64 y)) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (pow.f64 (*.f64 z (cos.f64 y)) 2))) (neg.f64 (-.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 z (cos.f64 y)) 2) (pow.f64 (*.f64 x (sin.f64 y)) 2)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 1) (log.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (fma.f64 (*.f64 z (cos.f64 y)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y))) (pow.f64 (*.f64 x (sin.f64 y)) 2)) (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (-.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (pow.f64 (*.f64 z (cos.f64 y)) 2))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (pow.f64 (cbrt.f64 (log.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))))) 2)) (cbrt.f64 (log.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (exp.f64 (sqrt.f64 (log.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))))) (sqrt.f64 (log.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 z (cos.f64 y)))) (pow.f64 (exp.f64 x) (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (exp.f64 z) (cos.f64 y)) (+.f64 1 (expm1.f64 (*.f64 x (sin.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 z (cos.f64 y)))) (+.f64 1 (expm1.f64 (*.f64 x (sin.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 x (sin.f64 y)))) (pow.f64 (exp.f64 z) (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (exp.f64 x) (sin.f64 y)) (+.f64 1 (expm1.f64 (*.f64 z (cos.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 x (sin.f64 y)))) (+.f64 1 (expm1.f64 (*.f64 z (cos.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (cos.f64 y)) 1 (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 x (sin.f64 y)) 1 (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) (cbrt.f64 (*.f64 x (sin.f64 y))) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 z (cos.f64 y))) (pow.f64 (cbrt.f64 (*.f64 z (cos.f64 y))) 2) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 z (cos.f64 y))) 2) (cbrt.f64 (*.f64 z (cos.f64 y))) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) (cos.f64 y)) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) (sin.f64 y)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 (sin.f64 y) 2)) (*.f64 (cbrt.f64 (sin.f64 y)) x) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) (*.f64 (cbrt.f64 (cos.f64 y)) z) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) (sqrt.f64 (*.f64 x (sin.f64 y))) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 z (cos.f64 y))) (sqrt.f64 (*.f64 z (cos.f64 y))) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 z) (*.f64 (sqrt.f64 z) (cos.f64 y)) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sin.f64 y)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (sin.f64 y)) (*.f64 (sqrt.f64 (sin.f64 y)) x) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (cos.f64 y)) (*.f64 (sqrt.f64 (cos.f64 y)) z) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 x (cbrt.f64 (pow.f64 (sin.f64 y) 2))) (cbrt.f64 (sin.f64 y)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (sin.f64 y) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 x) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) (cbrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cos.f64 y) (pow.f64 (cbrt.f64 z) 2)) (cbrt.f64 z) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cos.f64 y) (sqrt.f64 z)) (sqrt.f64 z) (*.f64 x (sin.f64 y))))))) |
| 1× | egg-herbie |
| 682× | sqr-pow_binary64 |
| 626× | cube-prod_binary64 |
| 464× | *-commutative_binary64 |
| 443× | pow-sqr_binary64 |
| 413× | distribute-lft-out_binary64 |
Useful iterations: 3 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 55 | 732 |
| 1 | 150 | 723 |
| 2 | 414 | 705 |
| 3 | 1331 | 704 |
| 4 | 2171 | 704 |
| 5 | 3318 | 704 |
| 6 | 3456 | 704 |
| 7 | 3673 | 704 |
| 8 | 3888 | 704 |
| 9 | 4170 | 704 |
| 10 | 4583 | 704 |
| 11 | 5080 | 704 |
| 12 | 5658 | 704 |
| 13 | 6348 | 704 |
| 14 | 6858 | 704 |
| 15 | 7252 | 704 |
| 16 | 7640 | 704 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
z |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 z (*.f64 1/24 (*.f64 (pow.f64 y 4) z)))) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 -1/720 (*.f64 (pow.f64 y 6) z)) (+.f64 z (*.f64 1/24 (*.f64 (pow.f64 y 4) z))))) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 (*.f64 -1/5040 (*.f64 (pow.f64 y 7) x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
z |
(+.f64 (*.f64 y x) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
| Outputs |
|---|
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
(*.f64 (cos.f64 y) z) |
z |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) z) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) z) |
(fma.f64 -1/2 (*.f64 y (*.f64 y z)) z) |
(*.f64 z (fma.f64 -1/2 (*.f64 y y) 1)) |
(*.f64 z (fma.f64 (*.f64 y -1/2) y 1)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 z (*.f64 1/24 (*.f64 (pow.f64 y 4) z)))) |
(+.f64 (fma.f64 -1/2 (*.f64 z (*.f64 y y)) z) (*.f64 1/24 (*.f64 z (pow.f64 y 4)))) |
(fma.f64 -1/2 (*.f64 y (*.f64 y z)) (fma.f64 1/24 (*.f64 z (pow.f64 y 4)) z)) |
(*.f64 z (+.f64 (*.f64 -1/2 (*.f64 y y)) (fma.f64 1/24 (pow.f64 y 4) 1))) |
(*.f64 z (+.f64 (*.f64 1/24 (pow.f64 y 4)) (fma.f64 (*.f64 y -1/2) y 1))) |
(*.f64 z (+.f64 (*.f64 y (*.f64 y -1/2)) (fma.f64 1/24 (pow.f64 y 4) 1))) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 -1/720 (*.f64 (pow.f64 y 6) z)) (+.f64 z (*.f64 1/24 (*.f64 (pow.f64 y 4) z))))) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (fma.f64 -1/720 (*.f64 z (pow.f64 y 6)) (+.f64 z (*.f64 1/24 (*.f64 z (pow.f64 y 4)))))) |
(fma.f64 -1/2 (*.f64 y (*.f64 y z)) (fma.f64 -1/720 (*.f64 z (pow.f64 y 6)) (fma.f64 1/24 (*.f64 z (pow.f64 y 4)) z))) |
(fma.f64 z (fma.f64 -1/2 (*.f64 y y) (*.f64 -1/720 (pow.f64 y 6))) (*.f64 z (fma.f64 1/24 (pow.f64 y 4) 1))) |
(*.f64 z (+.f64 (fma.f64 1/24 (pow.f64 y 4) 1) (fma.f64 -1/2 (*.f64 y y) (*.f64 -1/720 (pow.f64 y 6))))) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))) |
(fma.f64 y x (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))) |
(*.f64 x (+.f64 y (*.f64 -1/6 (pow.f64 y 3)))) |
(*.f64 x (fma.f64 -1/6 (pow.f64 y 3) y)) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (*.f64 x (+.f64 y (*.f64 -1/6 (pow.f64 y 3))))) |
(*.f64 x (+.f64 (*.f64 1/120 (pow.f64 y 5)) (fma.f64 -1/6 (pow.f64 y 3) y))) |
(*.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (fma.f64 1/120 (pow.f64 y 5) y))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 (*.f64 -1/5040 (*.f64 (pow.f64 y 7) x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (fma.f64 -1/5040 (*.f64 x (pow.f64 y 7)) (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (*.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (*.f64 -1/5040 (pow.f64 y 7)))))) |
(*.f64 x (+.f64 (fma.f64 -1/6 (pow.f64 y 3) (*.f64 -1/5040 (pow.f64 y 7))) (fma.f64 1/120 (pow.f64 y 5) y))) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
z |
(+.f64 (*.f64 y x) z) |
(fma.f64 y x z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (fma.f64 y x z)) |
(fma.f64 -1/2 (*.f64 y (*.f64 y z)) (fma.f64 y x z)) |
(fma.f64 z (*.f64 -1/2 (*.f64 y y)) (fma.f64 y x z)) |
(fma.f64 y x (*.f64 z (fma.f64 (*.f64 y -1/2) y 1))) |
(fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (+.f64 (fma.f64 y x z) (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 -1/2 (*.f64 y (*.f64 y z)) (fma.f64 y x (fma.f64 (*.f64 -1/6 (pow.f64 y 3)) x z))) |
(fma.f64 z (*.f64 -1/2 (*.f64 y y)) (fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) z)) |
(fma.f64 z (*.f64 y (*.f64 y -1/2)) (fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
Found 2 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| 0.1b | (*.f64 z (cos.f64 y)) |
Compiled 22 to 7 computations (68.2% saved)
9 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 1.0ms | x | @ | -inf | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| 1.0ms | x | @ | 0 | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| 1.0ms | y | @ | -inf | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| 0.0ms | x | @ | inf | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| 0.0ms | y | @ | inf | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| 1× | batch-egg-rewrite |
| 757× | pow1_binary64 |
| 689× | add-log-exp_binary64 |
| 689× | log1p-expm1-u_binary64 |
| 689× | expm1-log1p-u_binary64 |
| 672× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 8 | 12 |
| 1 | 156 | 12 |
| 2 | 1853 | 12 |
| 1× | node limit |
| Inputs |
|---|
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 x (sin.f64 y)) 1) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))) (pow.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))) 2) (cbrt.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))) (sqrt.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3)) (+.f64 (*.f64 (*.f64 x (sin.f64 y)) (*.f64 x (sin.f64 y))) (-.f64 (pow.f64 (*.f64 z (cos.f64 y)) 2) (*.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 x (sin.f64 y)) (*.f64 x (sin.f64 y))) (pow.f64 (*.f64 z (cos.f64 y)) 2)) (-.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))))))))) |
| 1× | egg-herbie |
| 853× | fma-def_binary64 |
| 757× | sqr-pow_binary64 |
| 556× | distribute-lft-out_binary64 |
| 476× | *-commutative_binary64 |
| 441× | cube-prod_binary64 |
Useful iterations: 4 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 25 | 396 |
| 1 | 63 | 394 |
| 2 | 151 | 394 |
| 3 | 400 | 391 |
| 4 | 1332 | 388 |
| 5 | 2659 | 388 |
| 6 | 4130 | 388 |
| 7 | 4254 | 388 |
| 8 | 4430 | 388 |
| 9 | 4644 | 388 |
| 10 | 4980 | 388 |
| 11 | 5334 | 388 |
| 12 | 5810 | 388 |
| 13 | 6353 | 388 |
| 14 | 7015 | 388 |
| 15 | 7843 | 388 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
z |
(+.f64 (*.f64 y x) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
| Outputs |
|---|
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
z |
(+.f64 (*.f64 y x) z) |
(fma.f64 y x z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (fma.f64 y x z)) |
(fma.f64 -1/2 (*.f64 y (*.f64 y z)) (fma.f64 y x z)) |
(fma.f64 y x (fma.f64 z (*.f64 y (*.f64 y -1/2)) z)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 y (*.f64 z -1/2) x) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (+.f64 (fma.f64 y x z) (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 -1/2 (*.f64 y (*.f64 y z)) (fma.f64 y x (fma.f64 -1/6 (*.f64 x (pow.f64 y 3)) z))) |
(fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 (pow.f64 y 3) (*.f64 x -1/6) (fma.f64 y x z))) |
(fma.f64 y (*.f64 y (*.f64 z -1/2)) (fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) z)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (fma.f64 y (*.f64 x -1/6) (*.f64 z -1/2)) z)) |
(fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) (*.f64 z (fma.f64 y (*.f64 y -1/2) 1))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
Compiled 3378 to 1083 computations (67.9% saved)
20 alts after pruning (18 fresh and 2 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 214 | 18 | 232 |
| Fresh | 0 | 0 | 0 |
| Picked | 0 | 1 | 1 |
| Done | 0 | 1 | 1 |
| Total | 214 | 20 | 234 |
| Status | Error | Program |
|---|---|---|
| ▶ | 0.1b | (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
| ▶ | 14.6b | (+.f64 (*.f64 x (sin.f64 y)) z) |
| ▶ | 16.6b | (fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
| 0.9b | (fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) (cos.f64 y)) (*.f64 x (sin.f64 y))) | |
| 34.1b | (fma.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x) (*.f64 z (cos.f64 y))) | |
| ▶ | 29.9b | (+.f64 (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) (*.f64 z (cos.f64 y))) |
| 0.8b | (+.f64 (*.f64 x (sin.f64 y)) (pow.f64 (cbrt.f64 (*.f64 z (cos.f64 y))) 3)) | |
| ✓ | 0.1b | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| 31.2b | (fma.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y)) (*.f64 z (cos.f64 y))) | |
| ▶ | 30.3b | (+.f64 (*.f64 y x) z) |
| ✓ | 0.1b | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| 0.3b | (fma.f64 (*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) (cbrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) | |
| 0.6b | (+.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 3) (*.f64 z (cos.f64 y))) | |
| 4.1b | (fma.f64 (*.f64 x (cbrt.f64 (pow.f64 (sin.f64 y) 2))) (cbrt.f64 (sin.f64 y)) (*.f64 z (cos.f64 y))) | |
| 30.2b | (fma.f64 y x z) | |
| 39.7b | z | |
| 37.1b | (*.f64 (sin.f64 y) x) | |
| 31.5b | (+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) | |
| 25.9b | (*.f64 (cos.f64 y) z) | |
| 35.7b | (fma.f64 (*.f64 (cos.f64 y) (sqrt.f64 z)) (sqrt.f64 z) (*.f64 x (sin.f64 y))) |
Compiled 477 to 312 computations (34.6% saved)
Found 2 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.1b | (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
| ✓ | 0.1b | (*.f64 (sin.f64 y) x) |
Compiled 22 to 7 computations (68.2% saved)
15 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 2.0ms | y | @ | -inf | (*.f64 (sin.f64 y) x) |
| 0.0ms | z | @ | -inf | (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
| 0.0ms | z | @ | inf | (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
| 0.0ms | y | @ | 0 | (*.f64 (sin.f64 y) x) |
| 0.0ms | y | @ | inf | (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
| 1× | batch-egg-rewrite |
| 757× | pow1_binary64 |
| 689× | add-log-exp_binary64 |
| 689× | log1p-expm1-u_binary64 |
| 689× | expm1-log1p-u_binary64 |
| 672× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 8 | 18 |
| 1 | 156 | 18 |
| 2 | 1853 | 18 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (sin.f64 y) x) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (sin.f64 y) x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sin.f64 y) x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (sin.f64 y) x)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (sin.f64 y) x)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (sin.f64 y)) x))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (sin.f64 y) 3) (pow.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 x 3) (pow.f64 (sin.f64 y) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (sin.f64 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (sin.f64 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (sin.f64 y) x))))))) |
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (sin.f64 y) x) (*.f64 (cos.f64 y) z))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 (cos.f64 y) z) 1) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))) (pow.f64 (cbrt.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))) 2) (cbrt.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))) (sqrt.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 (cos.f64 y) z) 3) (pow.f64 (*.f64 (sin.f64 y) x) 3)) (+.f64 (*.f64 (*.f64 (cos.f64 y) z) (*.f64 (cos.f64 y) z)) (-.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2) (*.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 (cos.f64 y) z) (*.f64 (cos.f64 y) z)) (pow.f64 (*.f64 (sin.f64 y) x) 2)) (-.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)))))))) |
| 1× | egg-herbie |
| 845× | fma-def_binary64 |
| 626× | distribute-lft-out_binary64 |
| 551× | sqr-pow_binary64 |
| 466× | associate-+l+_binary64 |
| 439× | unswap-sqr_binary64 |
Useful iterations: 3 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 40 | 472 |
| 1 | 109 | 467 |
| 2 | 285 | 453 |
| 3 | 811 | 451 |
| 4 | 2536 | 451 |
| 5 | 3406 | 451 |
| 6 | 5141 | 451 |
| 7 | 5482 | 451 |
| 8 | 6064 | 451 |
| 9 | 6482 | 451 |
| 10 | 6946 | 451 |
| 11 | 7476 | 451 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 (*.f64 -1/5040 (*.f64 (pow.f64 y 7) x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
z |
(+.f64 (*.f64 y x) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
| Outputs |
|---|
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))) |
(fma.f64 y x (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))) |
(*.f64 x (+.f64 y (*.f64 -1/6 (pow.f64 y 3)))) |
(*.f64 x (fma.f64 -1/6 (pow.f64 y 3) y)) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (*.f64 x (+.f64 y (*.f64 -1/6 (pow.f64 y 3))))) |
(*.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (fma.f64 1/120 (pow.f64 y 5) y))) |
(*.f64 x (fma.f64 -1/6 (pow.f64 y 3) (fma.f64 1/120 (pow.f64 y 5) y))) |
(*.f64 x (fma.f64 1/120 (pow.f64 y 5) (fma.f64 -1/6 (pow.f64 y 3) y))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 (*.f64 -1/5040 (*.f64 (pow.f64 y 7) x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (fma.f64 -1/5040 (*.f64 x (pow.f64 y 7)) (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (*.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (*.f64 -1/5040 (pow.f64 y 7)))))) |
(*.f64 x (+.f64 (fma.f64 -1/5040 (pow.f64 y 7) (*.f64 -1/6 (pow.f64 y 3))) (fma.f64 1/120 (pow.f64 y 5) y))) |
(*.f64 x (+.f64 (*.f64 1/120 (pow.f64 y 5)) (fma.f64 -1/5040 (pow.f64 y 7) (fma.f64 -1/6 (pow.f64 y 3) y)))) |
(*.f64 x (+.f64 y (fma.f64 1/120 (pow.f64 y 5) (fma.f64 -1/6 (pow.f64 y 3) (*.f64 -1/5040 (pow.f64 y 7)))))) |
z |
(+.f64 (*.f64 y x) z) |
(fma.f64 y x z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (fma.f64 y x z)) |
(fma.f64 -1/2 (*.f64 y (*.f64 y z)) (fma.f64 y x z)) |
(fma.f64 y x (fma.f64 z (*.f64 y (*.f64 y -1/2)) z)) |
(fma.f64 y x (fma.f64 z (*.f64 -1/2 (*.f64 y y)) z)) |
(fma.f64 y (*.f64 z (*.f64 y -1/2)) (fma.f64 y x z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (+.f64 (fma.f64 y x z) (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 -1/2 (*.f64 y (*.f64 y z)) (fma.f64 y x (fma.f64 -1/6 (*.f64 x (pow.f64 y 3)) z))) |
(fma.f64 z (*.f64 y (*.f64 y -1/2)) (fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) z)) |
(fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) (fma.f64 z (*.f64 -1/2 (*.f64 y y)) z)) |
(fma.f64 y (*.f64 z (*.f64 y -1/2)) (fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(*.f64 (cos.f64 y) z) |
(*.f64 z (cos.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(*.f64 (cos.f64 y) z) |
(*.f64 z (cos.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(*.f64 (cos.f64 y) z) |
(*.f64 z (cos.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 z (cos.f64 y) (*.f64 x (sin.f64 y))) |
Found 1 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (+.f64 (*.f64 y x) z) |
Compiled 14 to 5 computations (64.3% saved)
9 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 24.0ms | y | @ | inf | (+.f64 (*.f64 y x) z) |
| 2.0ms | x | @ | 0 | (+.f64 (*.f64 y x) z) |
| 0.0ms | y | @ | 0 | (+.f64 (*.f64 y x) z) |
| 0.0ms | x | @ | inf | (+.f64 (*.f64 y x) z) |
| 0.0ms | y | @ | -inf | (+.f64 (*.f64 y x) z) |
| 1× | batch-egg-rewrite |
| 707× | pow1_binary64 |
| 655× | add-log-exp_binary64 |
| 655× | log1p-expm1-u_binary64 |
| 655× | expm1-log1p-u_binary64 |
| 640× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 6 | 5 |
| 1 | 129 | 5 |
| 2 | 1775 | 5 |
| 1× | node limit |
| Inputs |
|---|
(+.f64 (*.f64 y x) z) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (fma.f64 y x z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (*.f64 y x) 2) (-.f64 (*.f64 y x) z)) (/.f64 (*.f64 z z) (-.f64 (*.f64 y x) z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 y x z) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 y x z)) (pow.f64 (cbrt.f64 (fma.f64 y x z)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 y x z)) 2) (cbrt.f64 (fma.f64 y x z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 y x z)) (sqrt.f64 (fma.f64 y x z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (-.f64 z (*.f64 y x))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (/.f64 1 (-.f64 (*.f64 y x) z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (-.f64 z (*.f64 y x)))) (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (*.f64 y x) z) (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (-.f64 z (*.f64 y x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (+.f64 (*.f64 z z) (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 y (*.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (-.f64 (*.f64 y x) z))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z (-.f64 z (*.f64 y x))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z))) (neg.f64 (-.f64 (*.f64 y x) z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 z z) (pow.f64 (*.f64 y x) 2)) (-.f64 z (*.f64 y x)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 y x z) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 y x z) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 y x z)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 y x z)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 y x z) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 y x z)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 y x z) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 y x z)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 y x z)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 y x z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 y x z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x y z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 y x) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 z (*.f64 y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 z) 2) (cbrt.f64 z) (*.f64 y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 y x)) 2) (cbrt.f64 (*.f64 y x)) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 z) (sqrt.f64 z) (*.f64 y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 y x)) (sqrt.f64 (*.f64 y x)) z))))) |
| 1× | egg-herbie |
| 1× | *-commutative_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 5 | 24 |
| 1 | 6 | 24 |
| 1× | saturated |
| Inputs |
|---|
z |
(*.f64 y x) |
(*.f64 y x) |
z |
(*.f64 y x) |
(*.f64 y x) |
(*.f64 y x) |
z |
z |
| Outputs |
|---|
z |
(*.f64 y x) |
(*.f64 y x) |
z |
(*.f64 y x) |
(*.f64 y x) |
(*.f64 y x) |
z |
z |
Found 2 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (+.f64 (*.f64 x (sin.f64 y)) z) |
| 0.1b | (*.f64 x (sin.f64 y)) |
Compiled 18 to 6 computations (66.7% saved)
9 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 5.0ms | z | @ | inf | (+.f64 (*.f64 x (sin.f64 y)) z) |
| 0.0ms | x | @ | 0 | (+.f64 (*.f64 x (sin.f64 y)) z) |
| 0.0ms | y | @ | 0 | (+.f64 (*.f64 x (sin.f64 y)) z) |
| 0.0ms | x | @ | inf | (+.f64 (*.f64 x (sin.f64 y)) z) |
| 0.0ms | y | @ | inf | (+.f64 (*.f64 x (sin.f64 y)) z) |
| 1× | batch-egg-rewrite |
| 802× | pow1_binary64 |
| 741× | add-log-exp_binary64 |
| 741× | log1p-expm1-u_binary64 |
| 741× | expm1-log1p-u_binary64 |
| 724× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 7 | 7 |
| 1 | 148 | 7 |
| 2 | 1998 | 7 |
| 1× | node limit |
| Inputs |
|---|
(+.f64 (*.f64 x (sin.f64 y)) z) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (fma.f64 x (sin.f64 y) z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (-.f64 (*.f64 x (sin.f64 y)) z)) (/.f64 (*.f64 z z) (-.f64 (*.f64 x (sin.f64 y)) z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 x (sin.f64 y) z) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 x (sin.f64 y) z))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) z)) (pow.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) z)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) z)) 2) (cbrt.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 x (sin.f64 y) z)) (sqrt.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z (-.f64 z (*.f64 x (sin.f64 y)))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z z)) (/.f64 1 (-.f64 (*.f64 x (sin.f64 y)) z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z (-.f64 z (*.f64 x (sin.f64 y))))) (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 z 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (*.f64 x (sin.f64 y)) z) (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 z 3)) (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z (-.f64 z (*.f64 x (sin.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 z 3)) (+.f64 (*.f64 z z) (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 x (*.f64 (sin.f64 y) z)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z z)) (-.f64 (*.f64 x (sin.f64 y)) z))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 z 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z (-.f64 z (*.f64 x (sin.f64 y)))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z z))) (neg.f64 (-.f64 (*.f64 x (sin.f64 y)) z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 z z) (pow.f64 (*.f64 x (sin.f64 y)) 2)) (-.f64 z (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 x (sin.f64 y) z) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 x (sin.f64 y) z) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) z)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 x (sin.f64 y) z)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 x (sin.f64 y) z) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 x (sin.f64 y) z) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x (sin.f64 y) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sin.f64 y) x z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 x (sin.f64 y)) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 z (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 z) 2) (cbrt.f64 z) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) (cbrt.f64 (*.f64 x (sin.f64 y))) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 z) (sqrt.f64 z) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) (sqrt.f64 (*.f64 x (sin.f64 y))) z))))) |
| 1× | egg-herbie |
| 1295× | fma-def_binary64 |
| 788× | sqr-pow_binary64 |
| 533× | associate-*l*_binary64 |
| 488× | *-commutative_binary64 |
| 448× | cube-prod_binary64 |
Useful iterations: 4 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 22 | 305 |
| 1 | 55 | 249 |
| 2 | 136 | 246 |
| 3 | 368 | 242 |
| 4 | 1004 | 240 |
| 5 | 2335 | 240 |
| 6 | 2793 | 240 |
| 7 | 3429 | 240 |
| 8 | 3551 | 240 |
| 9 | 3724 | 240 |
| 10 | 3943 | 240 |
| 11 | 4930 | 240 |
| 12 | 5390 | 240 |
| 13 | 5991 | 240 |
| 14 | 6744 | 240 |
| 15 | 7676 | 240 |
| 1× | node limit |
| Inputs |
|---|
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
z |
(+.f64 (*.f64 y x) z) |
(+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
| Outputs |
|---|
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
z |
(+.f64 (*.f64 y x) z) |
(fma.f64 y x z) |
(+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(+.f64 (fma.f64 y x z) (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))) |
(fma.f64 y x (fma.f64 -1/6 (*.f64 x (pow.f64 y 3)) z)) |
(fma.f64 x (*.f64 -1/6 (pow.f64 y 3)) (fma.f64 y x z)) |
(fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) z) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (+.f64 (fma.f64 y x z) (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (fma.f64 -1/6 (*.f64 x (pow.f64 y 3)) z))) |
(fma.f64 x (fma.f64 1/120 (pow.f64 y 5) y) (fma.f64 x (*.f64 -1/6 (pow.f64 y 3)) z)) |
(fma.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (fma.f64 1/120 (pow.f64 y 5) y)) z) |
(fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) (fma.f64 1/120 (pow.f64 y 5) y)) z) |
(fma.f64 x (fma.f64 1/120 (pow.f64 y 5) (fma.f64 -1/6 (pow.f64 y 3) y)) z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
Found 4 expressions with local error:
| New | Error | Program |
|---|---|---|
| 0.1b | (*.f64 x (sin.f64 y)) | |
| 0.1b | (*.f64 z (cos.f64 y)) | |
| ✓ | 0.2b | (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) |
| ✓ | 7.8b | (sqrt.f64 (*.f64 x (sin.f64 y))) |
Compiled 43 to 14 computations (67.4% saved)
12 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 58.0ms | y | @ | 0 | (sqrt.f64 (*.f64 x (sin.f64 y))) |
| 1.0ms | y | @ | 0 | (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) |
| 1.0ms | x | @ | 0 | (sqrt.f64 (*.f64 x (sin.f64 y))) |
| 1.0ms | x | @ | -inf | (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) |
| 1.0ms | x | @ | 0 | (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) |
| 1× | batch-egg-rewrite |
| 613× | pow1_binary64 |
| 565× | add-log-exp_binary64 |
| 565× | log1p-expm1-u_binary64 |
| 565× | expm1-log1p-u_binary64 |
| 551× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 8 | 14 |
| 1 | 163 | 14 |
| 2 | 1592 | 14 |
| 1× | node limit |
| Inputs |
|---|
(sqrt.f64 (*.f64 x (sin.f64 y))) |
(pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (sqrt.f64 (*.f64 x (sin.f64 y)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (sqrt.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) (cbrt.f64 (sqrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (sqrt.f64 (*.f64 x (sin.f64 y)))) (cbrt.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 x) (sqrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 x (sin.f64 y)) 1/4) (pow.f64 (*.f64 x (sin.f64 y)) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (sin.f64 y)) (sqrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2)) (sqrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/2) (sqrt.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) 1/2) (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (sin.f64 y)) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3/2) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (sqrt.f64 (*.f64 x (sin.f64 y)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (sin.f64 y)) 1/4) 2)))) (#(struct:change #<rule egg-rr> (2) ((x fabs.f64 (sqrt.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (sqrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3/2))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (sqrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (sqrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (sqrt.f64 (*.f64 x (sin.f64 y))))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 x (sin.f64 y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sin.f64 y) x)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (sin.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) (sqrt.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) (*.f64 (cbrt.f64 (sqrt.f64 (*.f64 x (sin.f64 y)))) (sqrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) (cbrt.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) (*.f64 (cbrt.f64 (sin.f64 y)) x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 (sin.f64 y)) (sqrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 x (sin.f64 y)) 1/4) (*.f64 (pow.f64 (*.f64 x (sin.f64 y)) 1/4) (sqrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (sin.f64 y)) (*.f64 (sqrt.f64 (sin.f64 y)) x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) (pow.f64 (*.f64 x (sin.f64 y)) 1/4)) (pow.f64 (*.f64 x (sin.f64 y)) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (pow.f64 (cbrt.f64 (sin.f64 y)) 2)) (cbrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sin.f64 y) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) (cbrt.f64 (*.f64 x (sin.f64 y)))) (cbrt.f64 (sqrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) (sqrt.f64 x)) (sqrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 x) (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (sin.f64 y)))))))) |
| 1× | egg-herbie |
| 1× | *-commutative_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 6 | 112 |
| 1 | 7 | 112 |
| 1× | saturated |
| Inputs |
|---|
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
| Outputs |
|---|
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(sqrt.f64 (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
Found 4 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (sqrt.f64 (cos.f64 y)) |
| ✓ | 0.1b | (fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
| ✓ | 0.1b | (*.f64 z (sqrt.f64 (cos.f64 y))) |
| 0.1b | (*.f64 x (sin.f64 y)) |
Compiled 35 to 9 computations (74.3% saved)
18 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 3.0ms | y | @ | 0 | (sqrt.f64 (cos.f64 y)) |
| 2.0ms | z | @ | inf | (*.f64 z (sqrt.f64 (cos.f64 y))) |
| 1.0ms | z | @ | 0 | (*.f64 z (sqrt.f64 (cos.f64 y))) |
| 1.0ms | y | @ | inf | (*.f64 z (sqrt.f64 (cos.f64 y))) |
| 1.0ms | y | @ | -inf | (*.f64 z (sqrt.f64 (cos.f64 y))) |
| 1× | batch-egg-rewrite |
| 931× | pow1_binary64 |
| 850× | add-log-exp_binary64 |
| 850× | log1p-expm1-u_binary64 |
| 850× | expm1-log1p-u_binary64 |
| 828× | add-exp-log_binary64 |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 10 | 34 |
| 1 | 196 | 27 |
| 2 | 2329 | 27 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 z (sqrt.f64 (cos.f64 y))) |
(fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
(sqrt.f64 (cos.f64 y)) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 z (sqrt.f64 (cos.f64 y)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 z (sqrt.f64 (cos.f64 y)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 z (sqrt.f64 (cos.f64 y)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (cos.f64 y) (*.f64 z z)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 z) (sqrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 z 3) (pow.f64 (cos.f64 y) 3/2)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (cos.f64 y) 3/2) (pow.f64 z 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 z (sqrt.f64 (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 z (sqrt.f64 (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 z (sqrt.f64 (cos.f64 y))))))))) |
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 z (cos.f64 y)) 1) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) (pow.f64 (cbrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) 2) (cbrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) (sqrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 z (cos.f64 y)) 3) (pow.f64 (*.f64 x (sin.f64 y)) 3)) (+.f64 (*.f64 (*.f64 z (cos.f64 y)) (*.f64 z (cos.f64 y))) (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 z (cos.f64 y)) (*.f64 z (cos.f64 y))) (pow.f64 (*.f64 x (sin.f64 y)) 2)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (sqrt.f64 (cos.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (cos.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (sqrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (sqrt.f64 (cos.f64 y))) (cbrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cos.f64 y)) (cbrt.f64 (sqrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cos.f64 y) 1/4) (pow.f64 (cos.f64 y) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2)) (sqrt.f64 (cbrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/2) (sqrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) 1/2) (pow.f64 (cbrt.f64 (cos.f64 y)) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cos.f64 y) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (cos.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cos.f64 y) 3/2) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (sqrt.f64 (cos.f64 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cos.f64 y) 1/4) 2)))) (#(struct:change #<rule egg-rr> (2) ((x fabs.f64 (sqrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (sqrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (cos.f64 y) 3/2))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (sqrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (sqrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (sqrt.f64 (cos.f64 y)))))))) |
| 1× | egg-herbie |
| 1900× | fma-def_binary64 |
| 662× | sqr-pow_binary64 |
| 419× | *-commutative_binary64 |
| 416× | cube-prod_binary64 |
| 351× | pow-sqr_binary64 |
Useful iterations: 8 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 53 | 610 |
| 1 | 131 | 602 |
| 2 | 334 | 593 |
| 3 | 1092 | 591 |
| 4 | 1759 | 591 |
| 5 | 2749 | 591 |
| 6 | 2883 | 591 |
| 7 | 3038 | 591 |
| 8 | 3204 | 585 |
| 9 | 5086 | 585 |
| 10 | 5397 | 585 |
| 11 | 5767 | 585 |
| 12 | 6232 | 585 |
| 13 | 6785 | 585 |
| 14 | 7532 | 585 |
| 15 | 7942 | 585 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
z |
(+.f64 (*.f64 -1/4 (*.f64 (pow.f64 y 2) z)) z) |
(+.f64 (*.f64 -1/4 (*.f64 (pow.f64 y 2) z)) (+.f64 z (*.f64 -1/96 (*.f64 (pow.f64 y 4) z)))) |
(+.f64 (*.f64 -19/5760 (*.f64 (pow.f64 y 6) z)) (+.f64 (*.f64 -1/4 (*.f64 (pow.f64 y 2) z)) (+.f64 z (*.f64 -1/96 (*.f64 (pow.f64 y 4) z))))) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
z |
(+.f64 (*.f64 y x) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
1 |
(+.f64 (*.f64 -1/4 (pow.f64 y 2)) 1) |
(+.f64 (*.f64 -1/4 (pow.f64 y 2)) (+.f64 1 (*.f64 -1/96 (pow.f64 y 4)))) |
(+.f64 (*.f64 -1/4 (pow.f64 y 2)) (+.f64 1 (+.f64 (*.f64 -1/96 (pow.f64 y 4)) (*.f64 -19/5760 (pow.f64 y 6))))) |
| Outputs |
|---|
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
(*.f64 (sqrt.f64 (cos.f64 y)) z) |
z |
(+.f64 (*.f64 -1/4 (*.f64 (pow.f64 y 2) z)) z) |
(fma.f64 -1/4 (*.f64 z (*.f64 y y)) z) |
(*.f64 (fma.f64 -1/4 (*.f64 y y) 1) z) |
(*.f64 z (fma.f64 -1/4 (*.f64 y y) 1)) |
(*.f64 z (fma.f64 y (*.f64 y -1/4) 1)) |
(+.f64 (*.f64 -1/4 (*.f64 (pow.f64 y 2) z)) (+.f64 z (*.f64 -1/96 (*.f64 (pow.f64 y 4) z)))) |
(+.f64 (fma.f64 -1/4 (*.f64 z (*.f64 y y)) z) (*.f64 -1/96 (*.f64 z (pow.f64 y 4)))) |
(fma.f64 -1/4 (*.f64 z (*.f64 y y)) (*.f64 (fma.f64 -1/96 (pow.f64 y 4) 1) z)) |
(*.f64 z (fma.f64 y (*.f64 y -1/4) (fma.f64 -1/96 (pow.f64 y 4) 1))) |
(fma.f64 z (*.f64 y (fma.f64 y -1/4 (*.f64 -1/96 (pow.f64 y 3)))) z) |
(+.f64 (*.f64 -19/5760 (*.f64 (pow.f64 y 6) z)) (+.f64 (*.f64 -1/4 (*.f64 (pow.f64 y 2) z)) (+.f64 z (*.f64 -1/96 (*.f64 (pow.f64 y 4) z))))) |
(fma.f64 -19/5760 (*.f64 z (pow.f64 y 6)) (+.f64 (fma.f64 -1/4 (*.f64 z (*.f64 y y)) z) (*.f64 -1/96 (*.f64 z (pow.f64 y 4))))) |
(fma.f64 -19/5760 (*.f64 z (pow.f64 y 6)) (fma.f64 -1/4 (*.f64 z (*.f64 y y)) (*.f64 (fma.f64 -1/96 (pow.f64 y 4) 1) z))) |
(+.f64 z (*.f64 z (fma.f64 y (*.f64 y -1/4) (fma.f64 -1/96 (pow.f64 y 4) (*.f64 -19/5760 (pow.f64 y 6)))))) |
(*.f64 z (fma.f64 y (*.f64 y -1/4) (fma.f64 -1/96 (pow.f64 y 4) (fma.f64 -19/5760 (pow.f64 y 6) 1)))) |
(*.f64 z (fma.f64 y (fma.f64 -19/5760 (pow.f64 y 5) (fma.f64 y -1/4 (*.f64 -1/96 (pow.f64 y 3)))) 1)) |
(fma.f64 z (fma.f64 y (*.f64 y -1/4) (*.f64 (pow.f64 y 4) (fma.f64 (*.f64 y y) -19/5760 -1/96))) z) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
z |
(+.f64 (*.f64 y x) z) |
(fma.f64 y x z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (fma.f64 y x z)) |
(fma.f64 (*.f64 z (*.f64 y y)) -1/2 (fma.f64 y x z)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 y (*.f64 z -1/2) x) z) |
(fma.f64 y (fma.f64 z (*.f64 y -1/2) x) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (+.f64 (fma.f64 y x z) (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 (*.f64 z (*.f64 y y)) -1/2 (fma.f64 y x (fma.f64 -1/6 (*.f64 x (pow.f64 y 3)) z))) |
(fma.f64 y x (fma.f64 z (*.f64 (*.f64 y y) -1/2) (fma.f64 x (*.f64 -1/6 (pow.f64 y 3)) z))) |
(fma.f64 y x (fma.f64 z (*.f64 y (*.f64 y -1/2)) (fma.f64 x (*.f64 -1/6 (pow.f64 y 3)) z))) |
(fma.f64 y x (fma.f64 (*.f64 y y) (fma.f64 x (*.f64 y -1/6) (*.f64 z -1/2)) z)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (fma.f64 z -1/2 (*.f64 x (*.f64 y -1/6))) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x (*.f64 (cos.f64 y) z)) |
1 |
(+.f64 (*.f64 -1/4 (pow.f64 y 2)) 1) |
(fma.f64 -1/4 (*.f64 y y) 1) |
(fma.f64 y (*.f64 y -1/4) 1) |
(+.f64 (*.f64 -1/4 (pow.f64 y 2)) (+.f64 1 (*.f64 -1/96 (pow.f64 y 4)))) |
(+.f64 (fma.f64 -1/4 (*.f64 y y) 1) (*.f64 -1/96 (pow.f64 y 4))) |
(fma.f64 -1/4 (*.f64 y y) (fma.f64 -1/96 (pow.f64 y 4) 1)) |
(fma.f64 y (*.f64 y -1/4) (fma.f64 -1/96 (pow.f64 y 4) 1)) |
(+.f64 (*.f64 -1/4 (pow.f64 y 2)) (+.f64 1 (+.f64 (*.f64 -1/96 (pow.f64 y 4)) (*.f64 -19/5760 (pow.f64 y 6))))) |
(+.f64 (fma.f64 -1/4 (*.f64 y y) 1) (fma.f64 -1/96 (pow.f64 y 4) (*.f64 -19/5760 (pow.f64 y 6)))) |
(fma.f64 y (*.f64 y -1/4) (fma.f64 -1/96 (pow.f64 y 4) (fma.f64 -19/5760 (pow.f64 y 6) 1))) |
(fma.f64 y (fma.f64 -19/5760 (pow.f64 y 5) (fma.f64 y -1/4 (*.f64 -1/96 (pow.f64 y 3)))) 1) |
Compiled 6693 to 2322 computations (65.3% saved)
24 alts after pruning (18 fresh and 6 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 434 | 13 | 447 |
| Fresh | 8 | 5 | 13 |
| Picked | 0 | 1 | 1 |
| Done | 1 | 5 | 6 |
| Total | 443 | 24 | 467 |
| Status | Error | Program |
|---|---|---|
| 35.9b | (+.f64 (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) z) | |
| 37.1b | (*.f64 (sin.f64 y) x) | |
| ✓ | 0.1b | (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
| ✓ | 14.6b | (+.f64 (*.f64 x (sin.f64 y)) z) |
| ✓ | 16.6b | (fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
| 0.9b | (fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) (cos.f64 y)) (*.f64 x (sin.f64 y))) | |
| ▶ | 31.5b | (+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
| ▶ | 0.3b | (fma.f64 (*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) (cbrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
| 30.2b | (fma.f64 y x z) | |
| ▶ | 34.1b | (+.f64 (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) (*.f64 z (cos.f64 y))) |
| 4.1b | (fma.f64 (*.f64 x (cbrt.f64 (pow.f64 (sin.f64 y) 2))) (cbrt.f64 (sin.f64 y)) (*.f64 z (cos.f64 y))) | |
| 49.3b | (+.f64 (pow.f64 (*.f64 (sqrt.f64 (sin.f64 y)) (sqrt.f64 x)) 2) (*.f64 z (cos.f64 y))) | |
| ▶ | 52.3b | (*.f64 y x) |
| ✓ | 30.3b | (+.f64 (*.f64 y x) z) |
| ✓ | 0.1b | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| 0.6b | (+.f64 (*.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) (*.f64 (cbrt.f64 (sin.f64 y)) x)) (*.f64 z (cos.f64 y))) | |
| 26.2b | (fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 y x)) | |
| 35.7b | (fma.f64 (*.f64 (cos.f64 y) (sqrt.f64 z)) (sqrt.f64 z) (*.f64 x (sin.f64 y))) | |
| 15.2b | (+.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 3) z) | |
| 39.7b | z | |
| 1.4b | (pow.f64 (cbrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) 3) | |
| ✓ | 0.1b | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| ▶ | 31.2b | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) (*.f64 z (cos.f64 y))) |
| 25.9b | (*.f64 (cos.f64 y) z) |
Compiled 537 to 353 computations (34.3% saved)
Found 4 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.1b | (*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) |
| ✓ | 0.2b | (pow.f64 (cos.f64 y) 2) |
| ✓ | 0.3b | (cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
| ✓ | 0.3b | (cbrt.f64 (cos.f64 y)) |
Compiled 49 to 22 computations (55.1% saved)
15 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 2.0ms | y | @ | inf | (cbrt.f64 (cos.f64 y)) |
| 2.0ms | z | @ | 0 | (*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) |
| 2.0ms | y | @ | -inf | (*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) |
| 2.0ms | y | @ | inf | (cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
| 2.0ms | y | @ | -inf | (cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
| 1× | batch-egg-rewrite |
| 713× | pow1_binary64 |
| 656× | add-log-exp_binary64 |
| 656× | log1p-expm1-u_binary64 |
| 656× | expm1-log1p-u_binary64 |
| 638× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 30 |
| 1 | 176 | 30 |
| 2 | 1920 | 30 |
| 1× | node limit |
| Inputs |
|---|
(cbrt.f64 (cos.f64 y)) |
(cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
(pow.f64 (cos.f64 y) 2) |
(*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (cbrt.f64 (cos.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cos.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (cbrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 2) (cbrt.f64 (cbrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) (pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cos.f64 y) 1/6) (pow.f64 (cos.f64 y) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (cbrt.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 4)))) (sqrt.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (cbrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (cos.f64 y)) 1/3) (pow.f64 (sqrt.f64 (cos.f64 y)) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cos.f64 y) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (cos.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cos.f64 y) 2) 1/6)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cos.f64 y) 1/6) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x fabs.f64 (cbrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (cbrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (cbrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (cbrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (cbrt.f64 (cos.f64 y)))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (pow.f64 (cbrt.f64 (cos.f64 y)) 2)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cos.f64 y)) (cbrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (pow.f64 (cbrt.f64 (cos.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 2) (cbrt.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 4))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 2) (*.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) (cbrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 4))) (pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (cos.f64 y)) (pow.f64 (cos.f64 y) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cos.f64 y) 1/6) (*.f64 (pow.f64 (cos.f64 y) 1/6) (cbrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (pow.f64 (cbrt.f64 (cos.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 4)) 1/3) (pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (cos.f64 y)) (pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 2)) (cbrt.f64 (cbrt.f64 (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cos.f64 y) 2/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (cos.f64 y)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cos.f64 y) 2) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 2) 3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 4)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2))))))) |
((#(struct:change #<rule egg-rr> (2) ((x +.f64 1/2 (*.f64 1/2 (cos.f64 (*.f64 2 y))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (pow.f64 (cos.f64 y) 2)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cos.f64 y) (cos.f64 y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cos.f64 y) 2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) (cbrt.f64 (pow.f64 (cos.f64 y) 4)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (pow.f64 (cos.f64 y) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 4)) (pow.f64 (cbrt.f64 (cos.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (cos.f64 y)) (*.f64 (sqrt.f64 (cos.f64 y)) (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cos.f64 y) (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cos.f64 y) (pow.f64 (cbrt.f64 (cos.f64 y)) 2)) (cbrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 4)) 1) (pow.f64 (cbrt.f64 (cos.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 4)) (cbrt.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 4)))) (pow.f64 (cbrt.f64 (cbrt.f64 (cos.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 4)) (cbrt.f64 (cos.f64 y))) (cbrt.f64 (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (cos.f64 (+.f64 y y)) (cos.f64 (-.f64 y y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cos.f64 y) 4))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 (cos.f64 y) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (pow.f64 (cos.f64 y) 2) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 (cos.f64 y) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 (cos.f64 y) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 2 (log.f64 (cos.f64 y)))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) z) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) z) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) z)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (cbrt.f64 (cos.f64 y)) (sqrt.f64 z)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (*.f64 z z) (cbrt.f64 (pow.f64 (cos.f64 y) 4))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 z) (pow.f64 (cbrt.f64 (cos.f64 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) z) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (cos.f64 y) 2) (pow.f64 z 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 z 3) (pow.f64 (cos.f64 y) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) z)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) z)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (pow.f64 (cbrt.f64 (cos.f64 y)) 2) z))))))) |
| 1× | egg-herbie |
| 1004× | fma-def_binary64 |
| 504× | fma-neg_binary64 |
| 490× | distribute-rgt-neg-in_binary64 |
| 438× | cancel-sign-sub-inv_binary64 |
| 373× | distribute-lft-neg-in_binary64 |
Useful iterations: 3 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 61 | 548 |
| 1 | 153 | 527 |
| 2 | 396 | 516 |
| 3 | 1260 | 514 |
| 4 | 3052 | 514 |
| 5 | 4385 | 514 |
| 6 | 6357 | 514 |
| 1× | node limit |
| Inputs |
|---|
1 |
(+.f64 1 (*.f64 -1/6 (pow.f64 y 2))) |
(+.f64 (*.f64 -1/72 (pow.f64 y 4)) (+.f64 1 (*.f64 -1/6 (pow.f64 y 2)))) |
(+.f64 (*.f64 -23/6480 (pow.f64 y 6)) (+.f64 (*.f64 -1/72 (pow.f64 y 4)) (+.f64 1 (*.f64 -1/6 (pow.f64 y 2))))) |
(pow.f64 (cos.f64 y) 1/3) |
(pow.f64 (cos.f64 y) 1/3) |
(pow.f64 (cos.f64 y) 1/3) |
(pow.f64 (cos.f64 y) 1/3) |
(pow.f64 (cos.f64 y) 1/3) |
(pow.f64 (cos.f64 y) 1/3) |
(pow.f64 (cos.f64 y) 1/3) |
(pow.f64 (cos.f64 y) 1/3) |
1 |
(+.f64 1 (*.f64 -1/3 (pow.f64 y 2))) |
(+.f64 1 (+.f64 (*.f64 -1/3 (pow.f64 y 2)) (*.f64 -1/405 (pow.f64 y 6)))) |
(+.f64 1 (+.f64 (*.f64 -1/1701 (pow.f64 y 8)) (+.f64 (*.f64 -1/3 (pow.f64 y 2)) (*.f64 -1/405 (pow.f64 y 6))))) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
1 |
(+.f64 (*.f64 -1 (pow.f64 y 2)) 1) |
(+.f64 (*.f64 -1 (pow.f64 y 2)) (+.f64 1 (*.f64 1/3 (pow.f64 y 4)))) |
(+.f64 (*.f64 -1 (pow.f64 y 2)) (+.f64 1 (+.f64 (*.f64 -2/45 (pow.f64 y 6)) (*.f64 1/3 (pow.f64 y 4))))) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
z |
(+.f64 z (*.f64 -1/3 (*.f64 (pow.f64 y 2) z))) |
(+.f64 z (+.f64 (*.f64 -1/405 (*.f64 (pow.f64 y 6) z)) (*.f64 -1/3 (*.f64 (pow.f64 y 2) z)))) |
(+.f64 (*.f64 -1/1701 (*.f64 (pow.f64 y 8) z)) (+.f64 z (+.f64 (*.f64 -1/405 (*.f64 (pow.f64 y 6) z)) (*.f64 -1/3 (*.f64 (pow.f64 y 2) z))))) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
| Outputs |
|---|
1 |
(+.f64 1 (*.f64 -1/6 (pow.f64 y 2))) |
(+.f64 1 (*.f64 -1/6 (*.f64 y y))) |
(fma.f64 -1/6 (*.f64 y y) 1) |
(+.f64 (*.f64 -1/72 (pow.f64 y 4)) (+.f64 1 (*.f64 -1/6 (pow.f64 y 2)))) |
(fma.f64 -1/72 (pow.f64 y 4) (+.f64 1 (*.f64 -1/6 (*.f64 y y)))) |
(fma.f64 -1/72 (pow.f64 y 4) (fma.f64 -1/6 (*.f64 y y) 1)) |
(fma.f64 -1/6 (*.f64 y y) (fma.f64 -1/72 (pow.f64 y 4) 1)) |
(+.f64 (*.f64 -23/6480 (pow.f64 y 6)) (+.f64 (*.f64 -1/72 (pow.f64 y 4)) (+.f64 1 (*.f64 -1/6 (pow.f64 y 2))))) |
(fma.f64 -23/6480 (pow.f64 y 6) (fma.f64 -1/72 (pow.f64 y 4) (+.f64 1 (*.f64 -1/6 (*.f64 y y))))) |
(fma.f64 -23/6480 (pow.f64 y 6) (fma.f64 -1/72 (pow.f64 y 4) (fma.f64 -1/6 (*.f64 y y) 1))) |
(fma.f64 -23/6480 (pow.f64 y 6) (fma.f64 -1/6 (*.f64 y y) (fma.f64 -1/72 (pow.f64 y 4) 1))) |
(fma.f64 (*.f64 y y) (fma.f64 y (*.f64 y -1/72) -1/6) (fma.f64 -23/6480 (pow.f64 y 6) 1)) |
(pow.f64 (cos.f64 y) 1/3) |
(cbrt.f64 (cos.f64 y)) |
(pow.f64 (cos.f64 y) 1/3) |
(cbrt.f64 (cos.f64 y)) |
(pow.f64 (cos.f64 y) 1/3) |
(cbrt.f64 (cos.f64 y)) |
(pow.f64 (cos.f64 y) 1/3) |
(cbrt.f64 (cos.f64 y)) |
(pow.f64 (cos.f64 y) 1/3) |
(cbrt.f64 (cos.f64 y)) |
(pow.f64 (cos.f64 y) 1/3) |
(cbrt.f64 (cos.f64 y)) |
(pow.f64 (cos.f64 y) 1/3) |
(cbrt.f64 (cos.f64 y)) |
(pow.f64 (cos.f64 y) 1/3) |
(cbrt.f64 (cos.f64 y)) |
1 |
(+.f64 1 (*.f64 -1/3 (pow.f64 y 2))) |
(+.f64 1 (*.f64 (*.f64 y y) -1/3)) |
(fma.f64 (*.f64 y y) -1/3 1) |
(fma.f64 y (*.f64 y -1/3) 1) |
(+.f64 1 (+.f64 (*.f64 -1/3 (pow.f64 y 2)) (*.f64 -1/405 (pow.f64 y 6)))) |
(+.f64 1 (fma.f64 -1/3 (*.f64 y y) (*.f64 (pow.f64 y 6) -1/405))) |
(+.f64 1 (fma.f64 (pow.f64 y 6) -1/405 (*.f64 y (*.f64 y -1/3)))) |
(fma.f64 y (*.f64 y -1/3) (fma.f64 (pow.f64 y 6) -1/405 1)) |
(+.f64 1 (+.f64 (*.f64 -1/1701 (pow.f64 y 8)) (+.f64 (*.f64 -1/3 (pow.f64 y 2)) (*.f64 -1/405 (pow.f64 y 6))))) |
(+.f64 1 (fma.f64 -1/1701 (pow.f64 y 8) (fma.f64 -1/3 (*.f64 y y) (*.f64 (pow.f64 y 6) -1/405)))) |
(+.f64 1 (fma.f64 -1/1701 (pow.f64 y 8) (fma.f64 (pow.f64 y 6) -1/405 (*.f64 y (*.f64 y -1/3))))) |
(fma.f64 -1/1701 (pow.f64 y 8) (fma.f64 y (*.f64 y -1/3) (fma.f64 (pow.f64 y 6) -1/405 1))) |
(fma.f64 y (*.f64 y -1/3) (fma.f64 (pow.f64 y 6) -1/405 (fma.f64 -1/1701 (pow.f64 y 8) 1))) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
(pow.f64 (pow.f64 (cos.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (cos.f64 y) 2)) |
1 |
(+.f64 (*.f64 -1 (pow.f64 y 2)) 1) |
(fma.f64 -1 (*.f64 y y) 1) |
(-.f64 1 (*.f64 y y)) |
(+.f64 (*.f64 -1 (pow.f64 y 2)) (+.f64 1 (*.f64 1/3 (pow.f64 y 4)))) |
(+.f64 (fma.f64 -1 (*.f64 y y) 1) (*.f64 (pow.f64 y 4) 1/3)) |
(-.f64 (fma.f64 (pow.f64 y 4) 1/3 1) (*.f64 y y)) |
(-.f64 (*.f64 (pow.f64 y 4) 1/3) (fma.f64 y y -1)) |
(+.f64 (*.f64 -1 (pow.f64 y 2)) (+.f64 1 (+.f64 (*.f64 -2/45 (pow.f64 y 6)) (*.f64 1/3 (pow.f64 y 4))))) |
(+.f64 (fma.f64 -1 (*.f64 y y) 1) (fma.f64 -2/45 (pow.f64 y 6) (*.f64 (pow.f64 y 4) 1/3))) |
(+.f64 (-.f64 1 (*.f64 y y)) (fma.f64 (pow.f64 y 4) 1/3 (*.f64 (pow.f64 y 6) -2/45))) |
(-.f64 (fma.f64 (pow.f64 y 4) 1/3 (fma.f64 (pow.f64 y 6) -2/45 1)) (*.f64 y y)) |
(-.f64 (fma.f64 (pow.f64 y 4) 1/3 (*.f64 (pow.f64 y 6) -2/45)) (fma.f64 y y -1)) |
(-.f64 (fma.f64 (pow.f64 y 4) 1/3 1) (fma.f64 y y (*.f64 (pow.f64 y 6) 2/45))) |
(-.f64 1 (fma.f64 y y (fma.f64 (pow.f64 y 4) -1/3 (*.f64 (pow.f64 y 6) 2/45)))) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
z |
(+.f64 z (*.f64 -1/3 (*.f64 (pow.f64 y 2) z))) |
(+.f64 z (*.f64 -1/3 (*.f64 (*.f64 y y) z))) |
(*.f64 (fma.f64 (*.f64 y y) -1/3 1) z) |
(fma.f64 (*.f64 y (*.f64 y -1/3)) z z) |
(fma.f64 y (*.f64 y (*.f64 -1/3 z)) z) |
(+.f64 z (+.f64 (*.f64 -1/405 (*.f64 (pow.f64 y 6) z)) (*.f64 -1/3 (*.f64 (pow.f64 y 2) z)))) |
(+.f64 z (fma.f64 -1/405 (*.f64 (pow.f64 y 6) z) (*.f64 -1/3 (*.f64 (*.f64 y y) z)))) |
(+.f64 z (*.f64 z (fma.f64 (pow.f64 y 6) -1/405 (*.f64 y (*.f64 y -1/3))))) |
(fma.f64 z (fma.f64 (pow.f64 y 6) -1/405 (*.f64 y (*.f64 y -1/3))) z) |
(fma.f64 (fma.f64 (pow.f64 y 6) -1/405 (*.f64 y (*.f64 y -1/3))) z z) |
(fma.f64 (fma.f64 y (*.f64 y -1/3) (*.f64 (pow.f64 y 6) -1/405)) z z) |
(+.f64 (*.f64 -1/1701 (*.f64 (pow.f64 y 8) z)) (+.f64 z (+.f64 (*.f64 -1/405 (*.f64 (pow.f64 y 6) z)) (*.f64 -1/3 (*.f64 (pow.f64 y 2) z))))) |
(fma.f64 -1/1701 (*.f64 (pow.f64 y 8) z) (+.f64 z (fma.f64 -1/405 (*.f64 (pow.f64 y 6) z) (*.f64 -1/3 (*.f64 (*.f64 y y) z))))) |
(+.f64 (*.f64 z (fma.f64 (pow.f64 y 6) -1/405 (*.f64 y (*.f64 y -1/3)))) (fma.f64 -1/1701 (*.f64 (pow.f64 y 8) z) z)) |
(+.f64 z (*.f64 z (fma.f64 y (*.f64 y -1/3) (fma.f64 (pow.f64 y 6) -1/405 (*.f64 -1/1701 (pow.f64 y 8)))))) |
(*.f64 z (fma.f64 y (*.f64 y -1/3) (fma.f64 (pow.f64 y 6) -1/405 (fma.f64 -1/1701 (pow.f64 y 8) 1)))) |
(*.f64 (fma.f64 y (*.f64 y -1/3) (fma.f64 (pow.f64 y 6) -1/405 (fma.f64 -1/1701 (pow.f64 y 8) 1))) z) |
(fma.f64 z (fma.f64 y (*.f64 y -1/3) (fma.f64 (pow.f64 y 6) -1/405 (*.f64 -1/1701 (pow.f64 y 8)))) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
(*.f64 (pow.f64 (*.f64 1 (pow.f64 (cos.f64 y) 2)) 1/3) z) |
(*.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) z) |
Compiled 8 to 4 computations (50% saved)
Found 4 expressions with local error:
| New | Error | Program |
|---|---|---|
| 0.0b | (+.f64 (*.f64 y x) z) | |
| ✓ | 0.2b | (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
| ✓ | 1.6b | (+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
| ✓ | 7.2b | (*.f64 (pow.f64 y 2) z) |
Compiled 44 to 23 computations (47.7% saved)
21 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 1.0ms | y | @ | 0 | (*.f64 (pow.f64 y 2) z) |
| 1.0ms | z | @ | 0 | (*.f64 (pow.f64 y 2) z) |
| 1.0ms | y | @ | inf | (*.f64 (pow.f64 y 2) z) |
| 1.0ms | x | @ | 0 | (+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
| 0.0ms | z | @ | 0 | (+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
| 1× | batch-egg-rewrite |
| 638× | log-prod_binary64 |
| 630× | fma-def_binary64 |
| 341× | pow2_binary64 |
| 334× | fma-neg_binary64 |
| 235× | pow1/3_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 12 | 32 |
| 1 | 269 | 32 |
| 2 | 3619 | 32 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (pow.f64 y 2) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (*.f64 y y) z))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 z) (*.f64 y y))) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 z) (*.f64 y y)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 z) (*.f64 y y)))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 z) (*.f64 y y)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 (*.f64 y y) z))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 y y) z) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (*.f64 y y) z) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (*.f64 y y) z)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 y (sqrt.f64 z)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (pow.f64 (*.f64 y y) 3) (pow.f64 z 3)) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (pow.f64 z 3) (pow.f64 (*.f64 y y) 3)) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 z) (*.f64 y y)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 (*.f64 y y) z))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (*.f64 y y) z) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 y y) 3) (pow.f64 z 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 z 3) (pow.f64 (*.f64 y y) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (*.f64 y y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (*.f64 y y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (*.f64 y y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 (*.f64 y y) z)) 1)))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4) (-.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2) (fma.f64 y x z))) (/.f64 (pow.f64 (fma.f64 y x z) 2) (-.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2) (fma.f64 y x z))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))) (pow.f64 (cbrt.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))) 2) (cbrt.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))) (sqrt.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 (pow.f64 (*.f64 (*.f64 y y) z) 3) -1/8 (pow.f64 (fma.f64 y x z) 3)) (/.f64 1 (fma.f64 (fma.f64 y x z) (-.f64 (fma.f64 y x z) (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4) (pow.f64 (fma.f64 y x z) 2)) (/.f64 1 (-.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2) (fma.f64 y x z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 (fma.f64 y x z) (-.f64 (fma.f64 y x z) (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4)) (fma.f64 (pow.f64 (*.f64 (*.f64 y y) z) 3) -1/8 (pow.f64 (fma.f64 y x z) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2) (fma.f64 y x z)) (-.f64 (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4) (pow.f64 (fma.f64 y x z) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 (pow.f64 (*.f64 (*.f64 y y) z) 3) -1/8 (pow.f64 (fma.f64 y x z) 3)) (fma.f64 (fma.f64 y x z) (-.f64 (fma.f64 y x z) (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (fma.f64 (pow.f64 (*.f64 (*.f64 y y) z) 3) -1/8 (pow.f64 (fma.f64 y x z) 3)) (+.f64 (pow.f64 (fma.f64 y x z) 2) (-.f64 (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4) (*.f64 (*.f64 (*.f64 y y) z) (*.f64 -1/2 (fma.f64 y x z))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4) (pow.f64 (fma.f64 y x z) 2)) (-.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2) (fma.f64 y x z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (fma.f64 (pow.f64 (*.f64 (*.f64 y y) z) 3) -1/8 (pow.f64 (fma.f64 y x z) 3))) (neg.f64 (fma.f64 (fma.f64 y x z) (-.f64 (fma.f64 y x z) (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4) (pow.f64 (fma.f64 y x z) 2))) (neg.f64 (-.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2) (fma.f64 y x z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)) 3) (pow.f64 z 3)) (+.f64 (pow.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)) 2) (-.f64 (*.f64 z z) (*.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)) z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (fma.f64 y x z) 2) (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4)) (-.f64 (fma.f64 y x z) (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)) 2) (*.f64 z z)) (-.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)) z))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (fma.f64 (fma.f64 y x z) (-.f64 (fma.f64 y x z) (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4)) (fma.f64 (pow.f64 (*.f64 (*.f64 y y) z) 3) -1/8 (pow.f64 (fma.f64 y x z) 3))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (-.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2) (fma.f64 y x z)) (-.f64 (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4) (pow.f64 (fma.f64 y x z) 2))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 z) (exp.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 z)) (exp.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 z) (*.f64 (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2) (exp.f64 (*.f64 y x)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 z)) (*.f64 (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2) (exp.f64 (*.f64 y x)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2))) (exp.f64 (fma.f64 y x z))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2) (+.f64 1 (expm1.f64 (fma.f64 y x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2))) (+.f64 1 (expm1.f64 (fma.f64 y x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (fma.f64 y x z))) (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (fma.f64 y x z)) (+.f64 1 (expm1.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (fma.f64 y x z))) (+.f64 1 (expm1.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (*.f64 (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2) (exp.f64 (*.f64 y x))) (exp.f64 z)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2))) (+.f64 1 (expm1.f64 z))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (*.f64 (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2) (exp.f64 (*.f64 y x))) (+.f64 1 (expm1.f64 z))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 y x (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y y) (*.f64 z -1/2) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 z 1 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 z (*.f64 (*.f64 y y) -1/2) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 y y) z) -1/2 (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 -1/2 (*.f64 (*.f64 y y) z) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2) 1 (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x y (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y x) 1 (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 y x z) 1 (*.f64 (*.f64 (*.f64 y y) z) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 z (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 (*.f64 (*.f64 y y) z) -1/2) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 y x) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 y x z) (*.f64 (*.f64 (*.f64 y y) z) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (fma.f64 y x z)) (pow.f64 (cbrt.f64 (fma.f64 y x z)) 2) (*.f64 (*.f64 (*.f64 y y) z) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 y x z)) 2) (cbrt.f64 (fma.f64 y x z)) (*.f64 (*.f64 (*.f64 y y) z) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (pow.f64 (cbrt.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) 2) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) 2) (cbrt.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 z) (pow.f64 (cbrt.f64 z) 2) (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 z) 2) (cbrt.f64 z) (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 y) 2) (*.f64 (cbrt.f64 y) x) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) y) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 (*.f64 y y) z)) 2) (*.f64 (cbrt.f64 (*.f64 (*.f64 y y) z)) -1/2) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 y x)) (pow.f64 (cbrt.f64 (*.f64 y x)) 2) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 y x)) 2) (cbrt.f64 (*.f64 y x)) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (fma.f64 y x z)) (sqrt.f64 (fma.f64 y x z)) (*.f64 (*.f64 (*.f64 y y) z) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 y (sqrt.f64 z)) (sqrt.f64 -1/2)) (*.f64 (*.f64 y (sqrt.f64 z)) (sqrt.f64 -1/2)) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 z) (sqrt.f64 z) (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 y) (*.f64 (sqrt.f64 y) x) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) y) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (sqrt.f64 z)) (*.f64 (*.f64 y (sqrt.f64 z)) -1/2) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 y x)) (sqrt.f64 (*.f64 y x)) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 (pow.f64 (*.f64 y x) 3) (pow.f64 z 3)) (/.f64 1 (fma.f64 z (-.f64 z (*.f64 y x)) (pow.f64 (*.f64 y x) 2))) (*.f64 (*.f64 (*.f64 y y) z) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (-.f64 (pow.f64 (*.f64 y x) 2) (*.f64 z z)) (/.f64 1 (-.f64 (*.f64 y x) z)) (*.f64 (*.f64 (*.f64 y y) z) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 y y) -1/2) z (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2)) 1 z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2))) 2) (cbrt.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2))) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2))) (sqrt.f64 (fma.f64 y x (*.f64 (*.f64 (*.f64 y y) z) -1/2))) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 -1/2 z) (*.f64 y y) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 -1/2 (pow.f64 (cbrt.f64 (*.f64 (*.f64 y y) z)) 2)) (cbrt.f64 (*.f64 (*.f64 y y) z)) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 -1/2 (*.f64 y (sqrt.f64 z))) (*.f64 y (sqrt.f64 z)) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 (*.f64 y y) -1/2) 1) z (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 (*.f64 y y) -1/2) (pow.f64 (cbrt.f64 z) 2)) (cbrt.f64 z) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 (*.f64 y y) -1/2) (sqrt.f64 z)) (sqrt.f64 z) (fma.f64 y x z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 x) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (sqrt.f64 x)) (sqrt.f64 x) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 x (pow.f64 (cbrt.f64 y) 2)) (cbrt.f64 y) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 x (sqrt.f64 y)) (sqrt.f64 y) (+.f64 z (*.f64 (*.f64 (*.f64 y y) z) -1/2))))))) |
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2)) 2)) (log.f64 (cbrt.f64 (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2))) (log.f64 (sqrt.f64 (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 y (sqrt.f64 z)) (sqrt.f64 -1/2)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (pow.f64 (*.f64 (*.f64 y y) z) 3) -1/8) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (*.f64 (*.f64 z z) (pow.f64 y 4)) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (pow.f64 (exp.f64 z) (*.f64 y y)) -1/2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 (*.f64 y y) z) 3) -1/8))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) 1)))))) |
| 1× | egg-herbie |
| 2100× | fma-neg_binary64 |
| 545× | fma-def_binary64 |
| 415× | distribute-rgt-neg-in_binary64 |
| 383× | unswap-sqr_binary64 |
| 331× | cancel-sign-sub-inv_binary64 |
Useful iterations: 4 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 25 | 258 |
| 1 | 57 | 234 |
| 2 | 127 | 234 |
| 3 | 334 | 232 |
| 4 | 1043 | 201 |
| 5 | 2391 | 201 |
| 6 | 4145 | 201 |
| 7 | 5107 | 201 |
| 8 | 6080 | 201 |
| 9 | 6522 | 201 |
| 10 | 7091 | 201 |
| 11 | 7404 | 201 |
| 1× | node limit |
| Inputs |
|---|
z |
(+.f64 (*.f64 y x) z) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (*.f64 y x)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (*.f64 y x)) |
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(*.f64 -1 (*.f64 (-.f64 (*.f64 1/2 (pow.f64 y 2)) 1) z)) |
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 (-.f64 (*.f64 1/2 (pow.f64 y 2)) 1) z))) |
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 (-.f64 (*.f64 1/2 (pow.f64 y 2)) 1) z))) |
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 (-.f64 (*.f64 1/2 (pow.f64 y 2)) 1) z))) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) z) |
(*.f64 y x) |
(*.f64 y x) |
| Outputs |
|---|
z |
(+.f64 (*.f64 y x) z) |
(fma.f64 y x z) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 z (*.f64 y y))) |
(*.f64 -1/2 (*.f64 (*.f64 z y) y)) |
(*.f64 y (*.f64 (*.f64 z y) -1/2)) |
(*.f64 z (*.f64 y (*.f64 y -1/2))) |
(*.f64 z (*.f64 -1/2 (*.f64 y y))) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (*.f64 y x)) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (*.f64 y x)) |
(fma.f64 y x (*.f64 -1/2 (*.f64 (*.f64 z y) y))) |
(fma.f64 y x (*.f64 y (*.f64 (*.f64 z y) -1/2))) |
(*.f64 y (+.f64 x (*.f64 z (*.f64 y -1/2)))) |
(*.f64 y (fma.f64 z (*.f64 y -1/2) x)) |
(*.f64 y (fma.f64 y (*.f64 z 1/2) x)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 z (*.f64 y y))) |
(*.f64 -1/2 (*.f64 (*.f64 z y) y)) |
(*.f64 y (*.f64 (*.f64 z y) -1/2)) |
(*.f64 z (*.f64 y (*.f64 y -1/2))) |
(*.f64 z (*.f64 -1/2 (*.f64 y y))) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (*.f64 y x)) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (*.f64 y x)) |
(fma.f64 y x (*.f64 -1/2 (*.f64 (*.f64 z y) y))) |
(fma.f64 y x (*.f64 y (*.f64 (*.f64 z y) -1/2))) |
(*.f64 y (+.f64 x (*.f64 z (*.f64 y -1/2)))) |
(*.f64 y (fma.f64 z (*.f64 y -1/2) x)) |
(*.f64 y (fma.f64 y (*.f64 z 1/2) x)) |
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(fma.f64 y x (*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y))))) |
(fma.f64 y x (fma.f64 -1/2 (*.f64 (*.f64 z y) y) z)) |
(fma.f64 z (fma.f64 y (*.f64 y -1/2) 1) (*.f64 y x)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 z (*.f64 y -1/2) x) z) |
(fma.f64 y (fma.f64 y (*.f64 z 1/2) x) z) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(fma.f64 y x (*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y))))) |
(fma.f64 y x (fma.f64 -1/2 (*.f64 (*.f64 z y) y) z)) |
(fma.f64 z (fma.f64 y (*.f64 y -1/2) 1) (*.f64 y x)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 z (*.f64 y -1/2) x) z) |
(fma.f64 y (fma.f64 y (*.f64 z 1/2) x) z) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(fma.f64 y x (*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y))))) |
(fma.f64 y x (fma.f64 -1/2 (*.f64 (*.f64 z y) y) z)) |
(fma.f64 z (fma.f64 y (*.f64 y -1/2) 1) (*.f64 y x)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 z (*.f64 y -1/2) x) z) |
(fma.f64 y (fma.f64 y (*.f64 z 1/2) x) z) |
(*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z) |
(*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y)))) |
(fma.f64 -1/2 (*.f64 (*.f64 z y) y) z) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) z) |
(fma.f64 (*.f64 y y) (*.f64 z -1/2) z) |
(*.f64 z (fma.f64 y (*.f64 y -1/2) 1)) |
(fma.f64 y (*.f64 y (*.f64 z 1/2)) z) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(fma.f64 y x (*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y))))) |
(fma.f64 y x (fma.f64 -1/2 (*.f64 (*.f64 z y) y) z)) |
(fma.f64 z (fma.f64 y (*.f64 y -1/2) 1) (*.f64 y x)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 z (*.f64 y -1/2) x) z) |
(fma.f64 y (fma.f64 y (*.f64 z 1/2) x) z) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(fma.f64 y x (*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y))))) |
(fma.f64 y x (fma.f64 -1/2 (*.f64 (*.f64 z y) y) z)) |
(fma.f64 z (fma.f64 y (*.f64 y -1/2) 1) (*.f64 y x)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 z (*.f64 y -1/2) x) z) |
(fma.f64 y (fma.f64 y (*.f64 z 1/2) x) z) |
(+.f64 (*.f64 y x) (*.f64 (+.f64 1 (*.f64 -1/2 (pow.f64 y 2))) z)) |
(fma.f64 y x (*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y))))) |
(fma.f64 y x (fma.f64 -1/2 (*.f64 (*.f64 z y) y) z)) |
(fma.f64 z (fma.f64 y (*.f64 y -1/2) 1) (*.f64 y x)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 z (*.f64 y -1/2) x) z) |
(fma.f64 y (fma.f64 y (*.f64 z 1/2) x) z) |
(*.f64 -1 (*.f64 (-.f64 (*.f64 1/2 (pow.f64 y 2)) 1) z)) |
(*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y)))) |
(fma.f64 -1/2 (*.f64 (*.f64 z y) y) z) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) z) |
(fma.f64 (*.f64 y y) (*.f64 z -1/2) z) |
(*.f64 z (fma.f64 y (*.f64 y -1/2) 1)) |
(fma.f64 y (*.f64 y (*.f64 z 1/2)) z) |
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 (-.f64 (*.f64 1/2 (pow.f64 y 2)) 1) z))) |
(fma.f64 y x (*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y))))) |
(fma.f64 y x (fma.f64 -1/2 (*.f64 (*.f64 z y) y) z)) |
(fma.f64 z (fma.f64 y (*.f64 y -1/2) 1) (*.f64 y x)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 z (*.f64 y -1/2) x) z) |
(fma.f64 y (fma.f64 y (*.f64 z 1/2) x) z) |
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 (-.f64 (*.f64 1/2 (pow.f64 y 2)) 1) z))) |
(fma.f64 y x (*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y))))) |
(fma.f64 y x (fma.f64 -1/2 (*.f64 (*.f64 z y) y) z)) |
(fma.f64 z (fma.f64 y (*.f64 y -1/2) 1) (*.f64 y x)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 z (*.f64 y -1/2) x) z) |
(fma.f64 y (fma.f64 y (*.f64 z 1/2) x) z) |
(+.f64 (*.f64 y x) (*.f64 -1 (*.f64 (-.f64 (*.f64 1/2 (pow.f64 y 2)) 1) z))) |
(fma.f64 y x (*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y))))) |
(fma.f64 y x (fma.f64 -1/2 (*.f64 (*.f64 z y) y) z)) |
(fma.f64 z (fma.f64 y (*.f64 y -1/2) 1) (*.f64 y x)) |
(fma.f64 y x (fma.f64 (*.f64 y y) (*.f64 z -1/2) z)) |
(fma.f64 y (fma.f64 z (*.f64 y -1/2) x) z) |
(fma.f64 y (fma.f64 y (*.f64 z 1/2) x) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) z) |
(*.f64 z (+.f64 1 (*.f64 -1/2 (*.f64 y y)))) |
(fma.f64 -1/2 (*.f64 (*.f64 z y) y) z) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) z) |
(fma.f64 (*.f64 y y) (*.f64 z -1/2) z) |
(*.f64 z (fma.f64 y (*.f64 y -1/2) 1)) |
(fma.f64 y (*.f64 y (*.f64 z 1/2)) z) |
(*.f64 y x) |
(*.f64 y x) |
Found 4 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (+.f64 (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) (*.f64 z (cos.f64 y))) |
| ✓ | 0.1b | (*.f64 (sin.f64 y) (sqrt.f64 x)) |
| 0.1b | (*.f64 z (cos.f64 y)) | |
| ✓ | 0.1b | (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) |
Compiled 42 to 10 computations (76.2% saved)
21 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 2.0ms | y | @ | 0 | (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) |
| 1.0ms | x | @ | -inf | (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) |
| 1.0ms | x | @ | 0 | (*.f64 (sin.f64 y) (sqrt.f64 x)) |
| 1.0ms | x | @ | -inf | (*.f64 (sin.f64 y) (sqrt.f64 x)) |
| 1.0ms | y | @ | 0 | (*.f64 (sin.f64 y) (sqrt.f64 x)) |
| 1× | batch-egg-rewrite |
| 599× | log-prod_binary64 |
| 437× | pow-prod-down_binary64 |
| 387× | fma-def_binary64 |
| 301× | pow2_binary64 |
| 229× | pow-unpow_binary64 |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 11 | 28 |
| 1 | 228 | 26 |
| 2 | 3002 | 26 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) |
(*.f64 (sin.f64 y) (sqrt.f64 x)) |
(+.f64 (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) (*.f64 z (cos.f64 y))) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 (sin.f64 y)) x)) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 (sin.f64 y)) x))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (sin.f64 y)) x))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (sin.f64 y)) x))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 (sin.f64 y) x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sin.f64 y) x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (sin.f64 y) x)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (sin.f64 y) x)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (pow.f64 x 3) (pow.f64 (sin.f64 y) 3)) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (sin.f64 y)) x))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 (sin.f64 y) x))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (sin.f64 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (sin.f64 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (sin.f64 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 (sin.f64 y) x)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (*.f64 (sin.f64 y) x))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (*.f64 (sin.f64 y) x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (*.f64 (sin.f64 y) x))) 1/3)))))) |
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (sin.f64 y) (sqrt.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 (sin.f64 y)) (sqrt.f64 x))) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 (sin.f64 y)) (sqrt.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (sin.f64 y)) (sqrt.f64 x)))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (sin.f64 y)) (sqrt.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (pow.f64 (sin.f64 y) 2)) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (sin.f64 y) (sqrt.f64 x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (sin.f64 y) (sqrt.f64 x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 x (pow.f64 (sin.f64 y) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (sin.f64 y)) (sqrt.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (sin.f64 y) (sqrt.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (sin.f64 y) (sqrt.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (sin.f64 y) (sqrt.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 (sin.f64 y) (sqrt.f64 x))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)))) 2)))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2) (-.f64 (*.f64 (sin.f64 y) x) (*.f64 z (cos.f64 y)))) (/.f64 (pow.f64 (*.f64 z (cos.f64 y)) 2) (-.f64 (*.f64 (sin.f64 y) x) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))) (pow.f64 (cbrt.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))) 2) (cbrt.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))) (sqrt.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3)) (/.f64 1 (fma.f64 (*.f64 z (cos.f64 y)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 (sin.f64 y) x)) (pow.f64 (*.f64 (sin.f64 y) x) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2) (pow.f64 (*.f64 z (cos.f64 y)) 2)) (/.f64 1 (-.f64 (*.f64 (sin.f64 y) x) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 (*.f64 z (cos.f64 y)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 (sin.f64 y) x)) (pow.f64 (*.f64 (sin.f64 y) x) 2)) (+.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (*.f64 (sin.f64 y) x) (*.f64 z (cos.f64 y))) (-.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2) (pow.f64 (*.f64 z (cos.f64 y)) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3)) (fma.f64 (*.f64 z (cos.f64 y)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 (sin.f64 y) x)) (pow.f64 (*.f64 (sin.f64 y) x) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3)) (+.f64 (pow.f64 (*.f64 z (cos.f64 y)) 2) (-.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2) (*.f64 (sin.f64 y) (*.f64 x (*.f64 z (cos.f64 y)))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2) (pow.f64 (*.f64 z (cos.f64 y)) 2)) (-.f64 (*.f64 (sin.f64 y) x) (*.f64 z (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3))) (neg.f64 (fma.f64 (*.f64 z (cos.f64 y)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 (sin.f64 y) x)) (pow.f64 (*.f64 (sin.f64 y) x) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2) (pow.f64 (*.f64 z (cos.f64 y)) 2))) (neg.f64 (-.f64 (*.f64 (sin.f64 y) x) (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 z (cos.f64 y)) 2) (pow.f64 (*.f64 (sin.f64 y) x) 2)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 (sin.f64 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (fma.f64 (*.f64 z (cos.f64 y)) (-.f64 (*.f64 z (cos.f64 y)) (*.f64 (sin.f64 y) x)) (pow.f64 (*.f64 (sin.f64 y) x) 2)) (+.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3) (pow.f64 (*.f64 z (cos.f64 y)) 3))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (-.f64 (*.f64 (sin.f64 y) x) (*.f64 z (cos.f64 y))) (-.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2) (pow.f64 (*.f64 z (cos.f64 y)) 2))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 (sin.f64 y) x))) (pow.f64 (exp.f64 z) (cos.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (exp.f64 (sin.f64 y)) x) (+.f64 1 (expm1.f64 (*.f64 z (cos.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 (sin.f64 y) x))) (+.f64 1 (expm1.f64 (*.f64 z (cos.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 z (cos.f64 y)))) (pow.f64 (exp.f64 (sin.f64 y)) x)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (exp.f64 z) (cos.f64 y)) (+.f64 1 (expm1.f64 (*.f64 (sin.f64 y) x)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 z (cos.f64 y)))) (+.f64 1 (expm1.f64 (*.f64 (sin.f64 y) x)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y))))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sin.f64 y) x (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 x) (*.f64 (sin.f64 y) (sqrt.f64 x)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (sin.f64 y) x) 1 (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 z (cos.f64 y) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (cos.f64 y)) 1 (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 (sin.f64 y) x) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 z (cos.f64 y)) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) (cos.f64 y)) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 (cos.f64 y) 2)) (*.f64 (cbrt.f64 (cos.f64 y)) z) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 x (pow.f64 (sin.f64 y) 2))) (*.f64 (cbrt.f64 (*.f64 (sin.f64 y) (sqrt.f64 x))) (sqrt.f64 x)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) (*.f64 (cbrt.f64 (sin.f64 y)) x) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 z (cos.f64 y))) (pow.f64 (cbrt.f64 (*.f64 z (cos.f64 y))) 2) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 z (cos.f64 y))) 2) (cbrt.f64 (*.f64 z (cos.f64 y))) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 (sin.f64 y) x)) (pow.f64 (cbrt.f64 (*.f64 (sin.f64 y) x)) 2) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 (sin.f64 y) x)) 2) (cbrt.f64 (*.f64 (sin.f64 y) x)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 x) (*.f64 (pow.f64 x 1/6) (*.f64 (sin.f64 y) (sqrt.f64 x))) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 z) (*.f64 (sqrt.f64 z) (cos.f64 y)) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 x 1/4) (*.f64 (pow.f64 x 1/4) (*.f64 (sin.f64 y) (sqrt.f64 x))) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (cos.f64 y)) (*.f64 (sqrt.f64 (cos.f64 y)) z) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 (sin.f64 y) (sqrt.f64 x))) (pow.f64 (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) x) 1/2) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (sin.f64 y)) (*.f64 (sqrt.f64 (sin.f64 y)) x) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 z (cos.f64 y))) (sqrt.f64 (*.f64 z (cos.f64 y))) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 (sin.f64 y) x)) (sqrt.f64 (*.f64 (sin.f64 y) x)) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) (cbrt.f64 (cos.f64 y)) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cos.f64 y) (pow.f64 (cbrt.f64 z) 2)) (cbrt.f64 z) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (cos.f64 y) (sqrt.f64 z)) (sqrt.f64 z) (*.f64 (sin.f64 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (sin.f64 y) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 x) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (sqrt.f64 x) (cbrt.f64 (*.f64 x (pow.f64 (sin.f64 y) 2)))) (cbrt.f64 (*.f64 (sin.f64 y) (sqrt.f64 x))) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (*.f64 x (*.f64 (sin.f64 y) (sqrt.f64 x))) 1/2) (sqrt.f64 (*.f64 (sin.f64 y) (sqrt.f64 x))) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (cbrt.f64 x)) (pow.f64 x 1/6) (*.f64 z (cos.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (pow.f64 x 1/4)) (pow.f64 x 1/4) (*.f64 z (cos.f64 y))))))) |
| 1× | egg-herbie |
| 925× | unsub-neg_binary64 |
| 670× | unswap-sqr_binary64 |
| 367× | *-commutative_binary64 |
| 324× | fma-def_binary64 |
| 271× | distribute-rgt-neg-out_binary64 |
Useful iterations: 5 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 59 | 688 |
| 1 | 164 | 673 |
| 2 | 478 | 643 |
| 3 | 1406 | 643 |
| 4 | 2058 | 643 |
| 5 | 2885 | 642 |
| 6 | 5184 | 642 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 (*.f64 -1/5040 (*.f64 (pow.f64 y 7) x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x))) |
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x))) |
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x))) |
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x))) |
(*.f64 y (sqrt.f64 x)) |
(+.f64 (*.f64 y (sqrt.f64 x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) (sqrt.f64 x)))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) (sqrt.f64 x))) (+.f64 (*.f64 y (sqrt.f64 x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) (sqrt.f64 x))))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) (sqrt.f64 x))) (+.f64 (*.f64 y (sqrt.f64 x)) (+.f64 (*.f64 -1/6 (*.f64 (pow.f64 y 3) (sqrt.f64 x))) (*.f64 -1/5040 (*.f64 (pow.f64 y 7) (sqrt.f64 x)))))) |
z |
(+.f64 (*.f64 y x) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x)))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x)))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x)))) |
(*.f64 (sin.f64 y) x) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
| Outputs |
|---|
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))) |
(fma.f64 y x (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))) |
(*.f64 x (+.f64 y (*.f64 -1/6 (pow.f64 y 3)))) |
(*.f64 x (fma.f64 -1/6 (pow.f64 y 3) y)) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (*.f64 x (+.f64 y (*.f64 -1/6 (pow.f64 y 3))))) |
(*.f64 x (+.f64 (fma.f64 -1/6 (pow.f64 y 3) y) (*.f64 1/120 (pow.f64 y 5)))) |
(*.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (fma.f64 1/120 (pow.f64 y 5) y))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 (*.f64 -1/5040 (*.f64 (pow.f64 y 7) x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (fma.f64 -1/5040 (*.f64 x (pow.f64 y 7)) (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (*.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (*.f64 -1/5040 (pow.f64 y 7)))))) |
(*.f64 x (+.f64 (fma.f64 1/120 (pow.f64 y 5) y) (fma.f64 -1/5040 (pow.f64 y 7) (*.f64 -1/6 (pow.f64 y 3))))) |
(*.f64 x (+.f64 (fma.f64 1/120 (pow.f64 y 5) y) (fma.f64 -1/6 (pow.f64 y 3) (*.f64 -1/5040 (pow.f64 y 7))))) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x))) |
(*.f64 x (sin.f64 y)) |
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x))) |
(*.f64 x (sin.f64 y)) |
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x))) |
(*.f64 x (sin.f64 y)) |
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x))) |
(*.f64 x (sin.f64 y)) |
(*.f64 y (sqrt.f64 x)) |
(+.f64 (*.f64 y (sqrt.f64 x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) (sqrt.f64 x)))) |
(fma.f64 y (sqrt.f64 x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) (sqrt.f64 x)))) |
(*.f64 (sqrt.f64 x) (+.f64 y (*.f64 -1/6 (pow.f64 y 3)))) |
(*.f64 (sqrt.f64 x) (fma.f64 -1/6 (pow.f64 y 3) y)) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) (sqrt.f64 x))) (+.f64 (*.f64 y (sqrt.f64 x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) (sqrt.f64 x))))) |
(fma.f64 1/120 (*.f64 (pow.f64 y 5) (sqrt.f64 x)) (fma.f64 y (sqrt.f64 x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) (sqrt.f64 x))))) |
(fma.f64 1/120 (*.f64 (pow.f64 y 5) (sqrt.f64 x)) (*.f64 (sqrt.f64 x) (+.f64 y (*.f64 -1/6 (pow.f64 y 3))))) |
(*.f64 (sqrt.f64 x) (+.f64 (fma.f64 -1/6 (pow.f64 y 3) y) (*.f64 1/120 (pow.f64 y 5)))) |
(*.f64 (sqrt.f64 x) (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (fma.f64 1/120 (pow.f64 y 5) y))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) (sqrt.f64 x))) (+.f64 (*.f64 y (sqrt.f64 x)) (+.f64 (*.f64 -1/6 (*.f64 (pow.f64 y 3) (sqrt.f64 x))) (*.f64 -1/5040 (*.f64 (pow.f64 y 7) (sqrt.f64 x)))))) |
(fma.f64 1/120 (*.f64 (pow.f64 y 5) (sqrt.f64 x)) (fma.f64 y (sqrt.f64 x) (fma.f64 -1/6 (*.f64 (pow.f64 y 3) (sqrt.f64 x)) (*.f64 -1/5040 (*.f64 (pow.f64 y 7) (sqrt.f64 x)))))) |
(+.f64 (*.f64 (sqrt.f64 x) (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (*.f64 -1/5040 (pow.f64 y 7)))) (*.f64 (sqrt.f64 x) (+.f64 (*.f64 1/120 (pow.f64 y 5)) y))) |
(*.f64 (sqrt.f64 x) (+.f64 (fma.f64 1/120 (pow.f64 y 5) y) (fma.f64 -1/5040 (pow.f64 y 7) (*.f64 -1/6 (pow.f64 y 3))))) |
(*.f64 (sqrt.f64 x) (+.f64 (fma.f64 1/120 (pow.f64 y 5) y) (fma.f64 -1/6 (pow.f64 y 3) (*.f64 -1/5040 (pow.f64 y 7))))) |
z |
(+.f64 (*.f64 y x) z) |
(fma.f64 y x z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (fma.f64 y x z)) |
(fma.f64 y x (fma.f64 -1/2 (*.f64 y (*.f64 y z)) z)) |
(fma.f64 y x (fma.f64 z (*.f64 y (*.f64 y -1/2)) z)) |
(+.f64 z (*.f64 y (fma.f64 z (*.f64 y -1/2) x))) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (+.f64 (fma.f64 y x z) (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 -1/2 (*.f64 z (*.f64 y y)) (fma.f64 y x (fma.f64 -1/6 (*.f64 x (pow.f64 y 3)) z))) |
(fma.f64 -1/2 (*.f64 y (*.f64 y z)) (fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) z)) |
(fma.f64 z (*.f64 y (*.f64 y -1/2)) (fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) z)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(*.f64 (cos.f64 y) z) |
(*.f64 z (cos.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x))) |
(*.f64 x (sin.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x)))) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x)))) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (sin.f64 y) x)))) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(*.f64 (sin.f64 y) x) |
(*.f64 x (sin.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(*.f64 (cos.f64 y) z) |
(*.f64 z (cos.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(*.f64 (cos.f64 y) z) |
(*.f64 z (cos.f64 y)) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (cos.f64 y) z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
Found 4 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (sqrt.f64 (sin.f64 y)) |
| 0.1b | (*.f64 z (cos.f64 y)) | |
| ✓ | 0.1b | (*.f64 x (sqrt.f64 (sin.f64 y))) |
| ✓ | 0.1b | (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) |
Compiled 45 to 10 computations (77.8% saved)
15 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 1.0ms | y | @ | inf | (*.f64 x (sqrt.f64 (sin.f64 y))) |
| 1.0ms | y | @ | 0 | (sqrt.f64 (sin.f64 y)) |
| 1.0ms | y | @ | 0 | (*.f64 x (sqrt.f64 (sin.f64 y))) |
| 1.0ms | x | @ | 0 | (*.f64 x (sqrt.f64 (sin.f64 y))) |
| 1.0ms | x | @ | inf | (*.f64 x (sqrt.f64 (sin.f64 y))) |
| 1× | batch-egg-rewrite |
| 641× | pow1_binary64 |
| 588× | add-log-exp_binary64 |
| 588× | log1p-expm1-u_binary64 |
| 588× | expm1-log1p-u_binary64 |
| 573× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 7 | 19 |
| 1 | 138 | 19 |
| 2 | 1640 | 19 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(sqrt.f64 (sin.f64 y)) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (sin.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 x) (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (sin.f64 y)))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (sqrt.f64 (sin.f64 y)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (sqrt.f64 (sin.f64 y)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x (sqrt.f64 (sin.f64 y)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (sin.f64 y) (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 x) (sqrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (sqrt.f64 (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (sqrt.f64 (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (sqrt.f64 (sin.f64 y))))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (sqrt.f64 (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (sin.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (sqrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (sqrt.f64 (sin.f64 y))) (cbrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (sin.f64 y)) (cbrt.f64 (sqrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sin.f64 y) 1/4) (pow.f64 (sin.f64 y) 1/4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2)) (sqrt.f64 (cbrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/2) (sqrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) 1/2) (pow.f64 (cbrt.f64 (sin.f64 y)) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sin.f64 y) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (sin.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (sin.f64 y) 3/2) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (sqrt.f64 (sin.f64 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (sin.f64 y) 1/4) 2)))) (#(struct:change #<rule egg-rr> (2) ((x fabs.f64 (sqrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (sqrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (sin.f64 y) 3/2))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (sqrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (sqrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (sqrt.f64 (sin.f64 y)))))))) |
| 1× | egg-herbie |
| 1154× | fma-def_binary64 |
| 690× | unswap-sqr_binary64 |
| 654× | sqr-pow_binary64 |
| 596× | cube-prod_binary64 |
| 430× | fabs-mul_binary64 |
Useful iterations: 4 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 28 | 356 |
| 1 | 74 | 353 |
| 2 | 193 | 342 |
| 3 | 567 | 340 |
| 4 | 1542 | 338 |
| 5 | 2401 | 338 |
| 6 | 2608 | 338 |
| 7 | 3056 | 338 |
| 8 | 3935 | 338 |
| 9 | 4078 | 338 |
| 10 | 4305 | 338 |
| 11 | 4792 | 338 |
| 12 | 5388 | 338 |
| 13 | 6261 | 338 |
| 14 | 7370 | 338 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 (*.f64 -1/5040 (*.f64 (pow.f64 y 7) x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
| Outputs |
|---|
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))) |
(fma.f64 y x (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))) |
(*.f64 x (+.f64 y (*.f64 -1/6 (pow.f64 y 3)))) |
(*.f64 x (fma.f64 -1/6 (pow.f64 y 3) y)) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (*.f64 x (+.f64 y (*.f64 -1/6 (pow.f64 y 3))))) |
(*.f64 x (+.f64 (*.f64 1/120 (pow.f64 y 5)) (fma.f64 -1/6 (pow.f64 y 3) y))) |
(*.f64 x (fma.f64 -1/6 (pow.f64 y 3) (fma.f64 1/120 (pow.f64 y 5) y))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 (*.f64 -1/5040 (*.f64 (pow.f64 y 7) x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (fma.f64 -1/5040 (*.f64 x (pow.f64 y 7)) (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (*.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (*.f64 -1/5040 (pow.f64 y 7)))))) |
(*.f64 x (+.f64 (fma.f64 -1/6 (pow.f64 y 3) (*.f64 -1/5040 (pow.f64 y 7))) (fma.f64 1/120 (pow.f64 y 5) y))) |
(*.f64 x (+.f64 (fma.f64 -1/6 (pow.f64 y 3) (*.f64 1/120 (pow.f64 y 5))) (fma.f64 -1/5040 (pow.f64 y 7) y))) |
(*.f64 x (fma.f64 -1/6 (pow.f64 y 3) (fma.f64 1/120 (pow.f64 y 5) (fma.f64 -1/5040 (pow.f64 y 7) y)))) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
(*.f64 (sqrt.f64 (sin.f64 y)) x) |
(*.f64 x (sqrt.f64 (sin.f64 y))) |
Compiled 10463 to 3795 computations (63.7% saved)
25 alts after pruning (17 fresh and 8 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 580 | 8 | 588 |
| Fresh | 4 | 9 | 13 |
| Picked | 1 | 0 | 1 |
| Done | 2 | 8 | 10 |
| Total | 587 | 25 | 612 |
| Status | Error | Program |
|---|---|---|
| 35.9b | (+.f64 (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) z) | |
| ▶ | 0.8b | (+.f64 (pow.f64 (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) 3) (*.f64 z (cos.f64 y))) |
| 37.1b | (*.f64 (sin.f64 y) x) | |
| ✓ | 0.1b | (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
| ✓ | 14.6b | (+.f64 (*.f64 x (sin.f64 y)) z) |
| ✓ | 0.3b | (fma.f64 (*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) (cbrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
| 31.1b | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (pow.f64 (pow.f64 (sin.f64 y) 1/4) 2)) (*.f64 z (cos.f64 y))) | |
| ▶ | 30.2b | (fma.f64 y x z) |
| ✓ | 30.3b | (+.f64 (*.f64 y x) z) |
| ✓ | 0.1b | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| 25.9b | (*.f64 (cos.f64 y) z) | |
| ▶ | 62.5b | (*.f64 z (*.f64 -1/2 (*.f64 y y))) |
| 31.5b | (+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) | |
| ▶ | 0.6b | (+.f64 (*.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) (*.f64 (cbrt.f64 (sin.f64 y)) x)) (*.f64 z (cos.f64 y))) |
| 26.2b | (fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 y x)) | |
| 15.2b | (+.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 3) z) | |
| ▶ | 39.4b | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) z) |
| 39.5b | (+.f64 (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) z) | |
| ✓ | 16.6b | (fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
| 39.7b | z | |
| 1.4b | (pow.f64 (cbrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) 3) | |
| ✓ | 0.1b | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| ✓ | 52.3b | (*.f64 y x) |
| 35.7b | (fma.f64 (*.f64 (cos.f64 y) (sqrt.f64 z)) (sqrt.f64 z) (*.f64 (sin.f64 y) x)) | |
| 0.9b | (fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) (cos.f64 y)) (*.f64 (sin.f64 y) x)) |
Compiled 529 to 349 computations (34% saved)
Found 4 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.2b | (*.f64 (cbrt.f64 (sin.f64 y)) x) |
| ✓ | 0.2b | (*.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) (*.f64 (cbrt.f64 (sin.f64 y)) x)) |
| ✓ | 0.5b | (pow.f64 (cbrt.f64 (sin.f64 y)) 2) |
| ✓ | 0.6b | (cbrt.f64 (sin.f64 y)) |
Compiled 55 to 18 computations (67.3% saved)
18 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 8.0ms | y | @ | inf | (pow.f64 (cbrt.f64 (sin.f64 y)) 2) |
| 2.0ms | y | @ | -inf | (cbrt.f64 (sin.f64 y)) |
| 2.0ms | x | @ | 0 | (*.f64 (cbrt.f64 (sin.f64 y)) x) |
| 2.0ms | y | @ | inf | (*.f64 (cbrt.f64 (sin.f64 y)) x) |
| 2.0ms | y | @ | -inf | (*.f64 (cbrt.f64 (sin.f64 y)) x) |
| 1× | batch-egg-rewrite |
| 769× | pow1_binary64 |
| 708× | add-log-exp_binary64 |
| 708× | log1p-expm1-u_binary64 |
| 708× | expm1-log1p-u_binary64 |
| 691× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 27 |
| 1 | 181 | 27 |
| 2 | 2014 | 27 |
| 1× | node limit |
| Inputs |
|---|
(cbrt.f64 (sin.f64 y)) |
(pow.f64 (cbrt.f64 (sin.f64 y)) 2) |
(*.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) (*.f64 (cbrt.f64 (sin.f64 y)) x)) |
(*.f64 (cbrt.f64 (sin.f64 y)) x) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (cbrt.f64 (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (sin.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (cbrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (sin.f64 y))) 2) (cbrt.f64 (cbrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cbrt.f64 (sin.f64 y))) (pow.f64 (cbrt.f64 (cbrt.f64 (sin.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sin.f64 y) 1/6) (pow.f64 (sin.f64 y) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (cbrt.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 4))) (sqrt.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (sin.f64 y))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (cbrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (sin.f64 y)) 1/3) (pow.f64 (sqrt.f64 (sin.f64 y)) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sin.f64 y) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (sin.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (cbrt.f64 (sin.f64 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (sin.f64 y) 1/6) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x fabs.f64 (cbrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (cbrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (cbrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (cbrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (cbrt.f64 (sin.f64 y)))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (pow.f64 (cbrt.f64 (sin.f64 y)) 2)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (sin.f64 y)) (cbrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (pow.f64 (cbrt.f64 (sin.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (sin.f64 y))) 2) (cbrt.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 4)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (sin.f64 y))) 2) (*.f64 (cbrt.f64 (cbrt.f64 (sin.f64 y))) (cbrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 4)) (pow.f64 (cbrt.f64 (cbrt.f64 (sin.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (sin.f64 y)) (pow.f64 (sin.f64 y) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sin.f64 y) 1/6) (*.f64 (pow.f64 (sin.f64 y) 1/6) (cbrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (sin.f64 y)) (pow.f64 (cbrt.f64 (cbrt.f64 (sin.f64 y))) 2)) (cbrt.f64 (cbrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 4))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (sin.f64 y) 2))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 2 (log.f64 (cbrt.f64 (sin.f64 y))))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (sin.f64 y) x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sin.f64 y) x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (sin.f64 y) x)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (sin.f64 y) x)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (sin.f64 y) x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (sin.f64 y)) x))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (sin.f64 y) x) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (sin.f64 y) 3) (pow.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (sin.f64 y) 2) (pow.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x) 3) (pow.f64 (sin.f64 y) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (sin.f64 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (sin.f64 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (sin.f64 y) x))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (cbrt.f64 (sin.f64 y)) x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 x) (cbrt.f64 (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (sin.f64 y) (pow.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 x 3) (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (cbrt.f64 (sin.f64 y)) x))))))) |
| 1× | egg-herbie |
| 1303× | fma-def_binary64 |
| 651× | sqr-pow_binary64 |
| 614× | unswap-sqr_binary64 |
| 541× | cube-prod_binary64 |
| 327× | associate-*l*_binary64 |
Useful iterations: 9 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 35 | 460 |
| 1 | 96 | 457 |
| 2 | 240 | 446 |
| 3 | 660 | 444 |
| 4 | 1979 | 444 |
| 5 | 2378 | 444 |
| 6 | 2806 | 444 |
| 7 | 3711 | 444 |
| 8 | 3917 | 444 |
| 9 | 4218 | 442 |
| 10 | 5432 | 442 |
| 11 | 6026 | 442 |
| 12 | 6929 | 442 |
| 13 | 7736 | 442 |
| 1× | node limit |
| Inputs |
|---|
(pow.f64 (sin.f64 y) 1/3) |
(pow.f64 (sin.f64 y) 1/3) |
(pow.f64 (sin.f64 y) 1/3) |
(pow.f64 (sin.f64 y) 1/3) |
(pow.f64 (sin.f64 y) 1/3) |
(pow.f64 (sin.f64 y) 1/3) |
(pow.f64 (sin.f64 y) 1/3) |
(pow.f64 (sin.f64 y) 1/3) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 (*.f64 -1/5040 (*.f64 (pow.f64 y 7) x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
| Outputs |
|---|
(pow.f64 (sin.f64 y) 1/3) |
(cbrt.f64 (sin.f64 y)) |
(pow.f64 (sin.f64 y) 1/3) |
(cbrt.f64 (sin.f64 y)) |
(pow.f64 (sin.f64 y) 1/3) |
(cbrt.f64 (sin.f64 y)) |
(pow.f64 (sin.f64 y) 1/3) |
(cbrt.f64 (sin.f64 y)) |
(pow.f64 (sin.f64 y) 1/3) |
(cbrt.f64 (sin.f64 y)) |
(pow.f64 (sin.f64 y) 1/3) |
(cbrt.f64 (sin.f64 y)) |
(pow.f64 (sin.f64 y) 1/3) |
(cbrt.f64 (sin.f64 y)) |
(pow.f64 (sin.f64 y) 1/3) |
(cbrt.f64 (sin.f64 y)) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (sin.f64 y) 2)) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (sin.f64 y) 2)) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (sin.f64 y) 2)) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (sin.f64 y) 2)) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (sin.f64 y) 2)) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (sin.f64 y) 2)) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (sin.f64 y) 2)) |
(pow.f64 (pow.f64 (sin.f64 y) 2) 1/3) |
(cbrt.f64 (pow.f64 (sin.f64 y) 2)) |
(*.f64 y x) |
(+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))) |
(fma.f64 y x (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))) |
(*.f64 x (+.f64 y (*.f64 -1/6 (pow.f64 y 3)))) |
(*.f64 x (fma.f64 -1/6 (pow.f64 y 3) y)) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (*.f64 x (+.f64 y (*.f64 -1/6 (pow.f64 y 3))))) |
(*.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (fma.f64 1/120 (pow.f64 y 5) y))) |
(*.f64 x (fma.f64 -1/6 (pow.f64 y 3) (fma.f64 1/120 (pow.f64 y 5) y))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 (*.f64 -1/5040 (*.f64 (pow.f64 y 7) x)) (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (fma.f64 -1/5040 (*.f64 x (pow.f64 y 7)) (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (*.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (*.f64 -1/5040 (pow.f64 y 7)))))) |
(*.f64 x (+.f64 (fma.f64 -1/6 (pow.f64 y 3) (*.f64 -1/5040 (pow.f64 y 7))) (fma.f64 1/120 (pow.f64 y 5) y))) |
(*.f64 x (+.f64 (fma.f64 1/120 (pow.f64 y 5) y) (fma.f64 -1/5040 (pow.f64 y 7) (*.f64 -1/6 (pow.f64 y 3))))) |
(*.f64 x (+.f64 (fma.f64 -1/5040 (pow.f64 y 7) y) (fma.f64 1/120 (pow.f64 y 5) (*.f64 -1/6 (pow.f64 y 3))))) |
(*.f64 x (+.f64 y (fma.f64 1/120 (pow.f64 y 5) (fma.f64 -1/5040 (pow.f64 y 7) (*.f64 -1/6 (pow.f64 y 3)))))) |
(*.f64 x (fma.f64 -1/6 (pow.f64 y 3) (fma.f64 1/120 (pow.f64 y 5) (fma.f64 -1/5040 (pow.f64 y 7) y)))) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
(*.f64 (pow.f64 (*.f64 1 (sin.f64 y)) 1/3) x) |
(*.f64 x (cbrt.f64 (sin.f64 y))) |
Found 2 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (*.f64 -1/2 (*.f64 y y)) |
| ✓ | 7.4b | (*.f64 z (*.f64 -1/2 (*.f64 y y))) |
Compiled 21 to 10 computations (52.4% saved)
9 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 0.0ms | y | @ | inf | (*.f64 -1/2 (*.f64 y y)) |
| 0.0ms | y | @ | 0 | (*.f64 -1/2 (*.f64 y y)) |
| 0.0ms | z | @ | 0 | (*.f64 z (*.f64 -1/2 (*.f64 y y))) |
| 0.0ms | y | @ | inf | (*.f64 z (*.f64 -1/2 (*.f64 y y))) |
| 0.0ms | z | @ | inf | (*.f64 z (*.f64 -1/2 (*.f64 y y))) |
| 1× | batch-egg-rewrite |
| 644× | pow1_binary64 |
| 594× | add-log-exp_binary64 |
| 594× | log1p-expm1-u_binary64 |
| 594× | expm1-log1p-u_binary64 |
| 581× | add-exp-log_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 7 | 17 |
| 1 | 143 | 17 |
| 2 | 1672 | 17 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 z (*.f64 -1/2 (*.f64 y y))) |
(*.f64 -1/2 (*.f64 y y)) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 z (*.f64 -1/2 (*.f64 y y)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 z (*.f64 -1/2 (*.f64 y y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 z (*.f64 -1/2 (*.f64 y y))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 z (*.f64 -1/2 (*.f64 y y)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sqrt.f64 (*.f64 z -1/2)) y) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (*.f64 1/4 (pow.f64 y 4)) (*.f64 z z)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (pow.f64 (exp.f64 -1/2) (*.f64 y y)) z))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 z (*.f64 -1/2 (*.f64 y y))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 z (*.f64 -1/2 (*.f64 y y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 z (*.f64 -1/2 (*.f64 y y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 z (*.f64 -1/2 (*.f64 y y))))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 -1/2 (*.f64 y y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 -1/2 (*.f64 y y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 -1/2 (*.f64 y y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 -1/2 (*.f64 y y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 y (sqrt.f64 -1/2)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 1/4 (pow.f64 y 4)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 -1/2) (*.f64 y y)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 -1/2 (*.f64 y y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 -1/2 (*.f64 y y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 -1/2 (*.f64 y y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 -1/2 (*.f64 y y)))))))) |
| 1× | egg-herbie |
| 2020× | unswap-sqr_binary64 |
| 1080× | sqr-pow_binary64 |
| 636× | fabs-mul_binary64 |
| 612× | pow-sqr_binary64 |
| 610× | cube-prod_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 324 |
| 1 | 18 | 324 |
| 2 | 39 | 324 |
| 3 | 90 | 324 |
| 4 | 247 | 324 |
| 5 | 850 | 324 |
| 6 | 1099 | 324 |
| 7 | 1513 | 324 |
| 8 | 1613 | 324 |
| 9 | 1748 | 324 |
| 10 | 1917 | 324 |
| 11 | 2162 | 324 |
| 12 | 2477 | 324 |
| 13 | 2849 | 324 |
| 14 | 3308 | 324 |
| 15 | 3893 | 324 |
| 16 | 4601 | 324 |
| 17 | 5461 | 324 |
| 18 | 5885 | 324 |
| 19 | 6199 | 324 |
| 20 | 6505 | 324 |
| 21 | 6583 | 324 |
| 22 | 6619 | 324 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (pow.f64 y 2)) |
| Outputs |
|---|
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) |
(*.f64 -1/2 (*.f64 (*.f64 y y) z)) |
(*.f64 -1/2 (*.f64 y (*.f64 y z))) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
(*.f64 -1/2 (pow.f64 y 2)) |
(*.f64 -1/2 (*.f64 y y)) |
Compiled 10 to 4 computations (60% saved)
Found 4 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.0b | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) z) |
| 0.0b | (sqrt.f64 (sin.f64 y)) | |
| 0.1b | (*.f64 x (sqrt.f64 (sin.f64 y))) | |
| 0.1b | (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) |
Compiled 36 to 8 computations (77.8% saved)
9 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 0.0ms | x | @ | 0 | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) z) |
| 0.0ms | z | @ | inf | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) z) |
| 0.0ms | y | @ | -inf | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) z) |
| 0.0ms | x | @ | inf | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) z) |
| 0.0ms | x | @ | -inf | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) z) |
| 1× | batch-egg-rewrite |
| 981× | pow1_binary64 |
| 906× | add-log-exp_binary64 |
| 906× | log1p-expm1-u_binary64 |
| 906× | expm1-log1p-u_binary64 |
| 98× | add-sqr-sqrt_binary64 |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 9 |
| 1 | 189 | 7 |
| 2 | 2501 | 7 |
| 1× | node limit |
| Inputs |
|---|
(+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) z) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (fma.f64 x (sin.f64 y) z))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (fma.f64 x (sin.f64 y) (neg.f64 z))) (/.f64 (*.f64 z z) (fma.f64 x (sin.f64 y) (neg.f64 z))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 x (sin.f64 y) z) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 x (sin.f64 y) z))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) z)) (pow.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) z)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) z)) 2) (cbrt.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 x (sin.f64 y) z)) (sqrt.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 z 3)) (/.f64 1 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z (-.f64 z (*.f64 x (sin.f64 y)))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z z)) (/.f64 1 (fma.f64 x (sin.f64 y) (neg.f64 z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z (-.f64 z (*.f64 x (sin.f64 y))))) (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 z 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 x (sin.f64 y) (neg.f64 z)) (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 z 3)) (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z (-.f64 z (*.f64 x (sin.f64 y))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 z 3)) (+.f64 (*.f64 z z) (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 x (*.f64 (sin.f64 y) z)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z z)) (fma.f64 x (sin.f64 y) (neg.f64 z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3) (pow.f64 z 3))) (neg.f64 (+.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z (-.f64 z (*.f64 x (sin.f64 y)))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2) (*.f64 z z))) (neg.f64 (fma.f64 x (sin.f64 y) (neg.f64 z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 z z) (pow.f64 (*.f64 x (sin.f64 y)) 2)) (-.f64 z (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 x (sin.f64 y) z) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 x (sin.f64 y) z) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 x (sin.f64 y) z)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 x (sin.f64 y) z)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 x (sin.f64 y) z) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (fma.f64 x (sin.f64 y) z))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 x (sin.f64 y) z) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 x (sin.f64 y) z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x (sin.f64 y) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (sin.f64 y)) (*.f64 x (sqrt.f64 (sin.f64 y))) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y)) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 x (sin.f64 y)) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 z (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 z) 2) (cbrt.f64 z) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2)) (cbrt.f64 (*.f64 x (sin.f64 y))) z)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 z) (sqrt.f64 z) (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) (sqrt.f64 (*.f64 x (sin.f64 y))) z))))) |
| 1× | egg-herbie |
| 1295× | fma-def_binary64 |
| 788× | sqr-pow_binary64 |
| 533× | associate-*l*_binary64 |
| 488× | *-commutative_binary64 |
| 448× | cube-prod_binary64 |
Useful iterations: 4 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 22 | 305 |
| 1 | 55 | 249 |
| 2 | 136 | 246 |
| 3 | 368 | 242 |
| 4 | 1004 | 240 |
| 5 | 2335 | 240 |
| 6 | 2793 | 240 |
| 7 | 3429 | 240 |
| 8 | 3551 | 240 |
| 9 | 3724 | 240 |
| 10 | 3943 | 240 |
| 11 | 4930 | 240 |
| 12 | 5390 | 240 |
| 13 | 5991 | 240 |
| 14 | 6744 | 240 |
| 15 | 7676 | 240 |
| 1× | node limit |
| Inputs |
|---|
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
z |
(+.f64 (*.f64 y x) z) |
(+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
| Outputs |
|---|
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
z |
(+.f64 (*.f64 y x) z) |
(fma.f64 y x z) |
(+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x)))) |
(+.f64 (fma.f64 y x z) (*.f64 -1/6 (*.f64 x (pow.f64 y 3)))) |
(fma.f64 y x (fma.f64 -1/6 (*.f64 x (pow.f64 y 3)) z)) |
(fma.f64 x (*.f64 -1/6 (pow.f64 y 3)) (fma.f64 y x z)) |
(fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) y) z) |
(+.f64 (*.f64 1/120 (*.f64 (pow.f64 y 5) x)) (+.f64 (*.f64 y x) (+.f64 z (*.f64 -1/6 (*.f64 (pow.f64 y 3) x))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (+.f64 (fma.f64 y x z) (*.f64 -1/6 (*.f64 x (pow.f64 y 3))))) |
(fma.f64 1/120 (*.f64 x (pow.f64 y 5)) (fma.f64 y x (fma.f64 -1/6 (*.f64 x (pow.f64 y 3)) z))) |
(fma.f64 x (fma.f64 1/120 (pow.f64 y 5) y) (fma.f64 x (*.f64 -1/6 (pow.f64 y 3)) z)) |
(fma.f64 x (+.f64 (*.f64 -1/6 (pow.f64 y 3)) (fma.f64 1/120 (pow.f64 y 5) y)) z) |
(fma.f64 x (fma.f64 -1/6 (pow.f64 y 3) (fma.f64 1/120 (pow.f64 y 5) y)) z) |
(fma.f64 x (fma.f64 1/120 (pow.f64 y 5) (fma.f64 -1/6 (pow.f64 y 3) y)) z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(*.f64 (sin.f64 y) x) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
z |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
(+.f64 z (*.f64 (sin.f64 y) x)) |
(fma.f64 (sin.f64 y) x z) |
Found 4 expressions with local error:
| New | Error | Program |
|---|---|---|
| ✓ | 0.4b | (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) |
| ✓ | 0.6b | (cbrt.f64 x) |
| 0.6b | (cbrt.f64 (sin.f64 y)) | |
| ✓ | 0.7b | (pow.f64 (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) 3) |
Compiled 47 to 15 computations (68.1% saved)
15 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 3.0ms | y | @ | -inf | (pow.f64 (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) 3) |
| 3.0ms | y | @ | inf | (pow.f64 (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) 3) |
| 2.0ms | y | @ | 0 | (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) |
| 2.0ms | x | @ | -inf | (pow.f64 (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) 3) |
| 1.0ms | y | @ | 0 | (pow.f64 (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) 3) |
| 1× | batch-egg-rewrite |
| 771× | pow1_binary64 |
| 717× | add-log-exp_binary64 |
| 717× | log1p-expm1-u_binary64 |
| 717× | expm1-log1p-u_binary64 |
| 695× | add-exp-log_binary64 |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 22 |
| 1 | 186 | 17 |
| 2 | 2049 | 17 |
| 1× | node limit |
| Inputs |
|---|
(pow.f64 (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) 3) |
(cbrt.f64 x) |
(*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) |
| Outputs |
|---|
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 x (sin.f64 y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 x) (*.f64 (cbrt.f64 (sin.f64 y)) (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sin.f64 y) x)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (sin.f64 y)) (*.f64 (cbrt.f64 x) (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (sin.f64 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) (cbrt.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2)) (*.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))) (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))) (*.f64 (sqrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))) (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) (sqrt.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2)) 3) (cbrt.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))) 3) (pow.f64 (sqrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (pow.f64 (cbrt.f64 (sin.f64 y)) 2)) (cbrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) (cbrt.f64 x)) (cbrt.f64 (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) (cbrt.f64 (sin.f64 y))) (cbrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) 1) (cbrt.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) (cbrt.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2))) (cbrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2) (sqrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y))))) (sqrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (sin.f64 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 x) (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (sin.f64 y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 x 3) (pow.f64 (sin.f64 y) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (sin.f64 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (sin.f64 y)))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (cbrt.f64 x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (cbrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cbrt.f64 x)) (pow.f64 (cbrt.f64 (cbrt.f64 x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 x)) 2) (cbrt.f64 (cbrt.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 x 1/6) (pow.f64 x 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (cbrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 x) 2) 1/3) (cbrt.f64 (cbrt.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 x) 1/3) (pow.f64 (sqrt.f64 x) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 x 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (cbrt.f64 x)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 x 1/6) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (cbrt.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (cbrt.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (cbrt.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (cbrt.f64 x))))))) |
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (cbrt.f64 (*.f64 x (sin.f64 y)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (sin.f64 y)) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 x (sin.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (cbrt.f64 (*.f64 x (sin.f64 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (cbrt.f64 (*.f64 x (sin.f64 y))))))))) |
| 1× | egg-herbie |
| 1290× | sqr-pow_binary64 |
| 666× | pow-sqr_binary64 |
| 625× | cube-prod_binary64 |
| 557× | fabs-mul_binary64 |
| 373× | unpow3_binary64 |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 10 | 136 |
| 1 | 26 | 112 |
| 2 | 40 | 112 |
| 3 | 51 | 112 |
| 4 | 75 | 112 |
| 5 | 162 | 112 |
| 6 | 543 | 112 |
| 7 | 1206 | 112 |
| 8 | 1298 | 112 |
| 9 | 1436 | 112 |
| 10 | 1599 | 112 |
| 11 | 1837 | 112 |
| 12 | 2164 | 112 |
| 13 | 2591 | 112 |
| 14 | 3097 | 112 |
| 15 | 3701 | 112 |
| 16 | 4428 | 112 |
| 17 | 4747 | 112 |
| 18 | 5033 | 112 |
| 19 | 5253 | 112 |
| 20 | 5431 | 112 |
| 21 | 5515 | 112 |
| 22 | 6458 | 112 |
| 23 | 7435 | 112 |
| 24 | 7901 | 112 |
| 1× | node limit |
| Inputs |
|---|
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
| Outputs |
|---|
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 1 (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 1 (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 1 (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 1 (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 1 (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 1 (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 1 (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (pow.f64 1 1/3) (*.f64 (sin.f64 y) x)) |
(*.f64 1 (*.f64 (sin.f64 y) x)) |
(*.f64 (sin.f64 y) x) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(cbrt.f64 (*.f64 (sin.f64 y) x)) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(cbrt.f64 (*.f64 (sin.f64 y) x)) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(cbrt.f64 (*.f64 (sin.f64 y) x)) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(cbrt.f64 (*.f64 (sin.f64 y) x)) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(cbrt.f64 (*.f64 (sin.f64 y) x)) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(cbrt.f64 (*.f64 (sin.f64 y) x)) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(cbrt.f64 (*.f64 (sin.f64 y) x)) |
(pow.f64 (*.f64 (sin.f64 y) x) 1/3) |
(cbrt.f64 (*.f64 (sin.f64 y) x)) |
Compiled 4881 to 1820 computations (62.7% saved)
27 alts after pruning (14 fresh and 13 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 318 | 6 | 324 |
| Fresh | 4 | 8 | 12 |
| Picked | 0 | 1 | 1 |
| Done | 0 | 12 | 12 |
| Total | 322 | 27 | 349 |
| Status | Error | Program |
|---|---|---|
| ✓ | 0.8b | (+.f64 (pow.f64 (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) 3) (*.f64 z (cos.f64 y))) |
| ✓ | 0.1b | (fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
| ✓ | 14.6b | (+.f64 (*.f64 x (sin.f64 y)) z) |
| ✓ | 16.6b | (fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
| 37.1b | (*.f64 (sin.f64 y) x) | |
| ✓ | 0.3b | (fma.f64 (*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) (cbrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
| ✓ | 30.2b | (fma.f64 y x z) |
| ✓ | 30.3b | (+.f64 (*.f64 y x) z) |
| ✓ | 0.1b | (fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
| 0.9b | (fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) (cos.f64 y)) (*.f64 (sin.f64 y) x)) | |
| 15.2b | (+.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 3) z) | |
| 35.9b | (+.f64 (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) z) | |
| 25.9b | (*.f64 (cos.f64 y) z) | |
| ✓ | 62.5b | (*.f64 z (*.f64 -1/2 (*.f64 y y))) |
| 62.3b | (*.f64 y (*.f64 -1/2 (*.f64 y z))) | |
| 31.5b | (+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) | |
| ✓ | 0.6b | (+.f64 (*.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) (*.f64 (cbrt.f64 (sin.f64 y)) x)) (*.f64 z (cos.f64 y))) |
| 26.2b | (fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 y x)) | |
| ✓ | 39.4b | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) z) |
| 39.5b | (+.f64 (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) z) | |
| 39.7b | z | |
| 1.4b | (pow.f64 (cbrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) 3) | |
| ✓ | 0.1b | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| ✓ | 52.3b | (*.f64 y x) |
| 39.4b | (+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (pow.f64 (pow.f64 (sin.f64 y) 1/4) 2)) z) | |
| 35.7b | (fma.f64 (*.f64 (cos.f64 y) (sqrt.f64 z)) (sqrt.f64 z) (*.f64 (sin.f64 y) x)) | |
| 62.4b | (-.f64 (+.f64 1 (*.f64 z (*.f64 -1/2 (*.f64 y y)))) 1) |
Compiled 333 to 221 computations (33.6% saved)
| Inputs |
|---|
z |
z |
(*.f64 y x) |
(+.f64 (*.f64 y x) z) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 z (*.f64 -1/2 (*.f64 y y))) |
(-.f64 (+.f64 1 (*.f64 z (*.f64 -1/2 (*.f64 y y)))) 1) |
(+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(fma.f64 y x z) |
(fma.f64 y x z) |
(*.f64 (sin.f64 y) x) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 x (sin.f64 y)) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(+.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 3) z) |
(+.f64 (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) z) |
(+.f64 (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) z) |
(+.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 3) z) |
(+.f64 (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) z) |
(+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) z) |
(pow.f64 (cbrt.f64 (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))) 3) |
(+.f64 (pow.f64 (sqrt.f64 (*.f64 x (sin.f64 y))) 2) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 x (sin.f64 y)) (pow.f64 (cbrt.f64 (*.f64 z (cos.f64 y))) 3)) |
(+.f64 (pow.f64 (cbrt.f64 (*.f64 x (sin.f64 y))) 3) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x)) (*.f64 z (cos.f64 y))) |
(fma.f64 (*.f64 (cos.f64 y) (sqrt.f64 z)) (sqrt.f64 z) (*.f64 (sin.f64 y) x)) |
(fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 y x)) |
(fma.f64 (*.f64 (sin.f64 y) (sqrt.f64 x)) (sqrt.f64 x) (*.f64 z (cos.f64 y))) |
(fma.f64 (*.f64 (cos.f64 y) (sqrt.f64 z)) (sqrt.f64 z) (*.f64 x (sin.f64 y))) |
(+.f64 (pow.f64 (*.f64 (cbrt.f64 x) (cbrt.f64 (sin.f64 y))) 3) (*.f64 z (cos.f64 y))) |
(+.f64 (pow.f64 (*.f64 (sqrt.f64 (sin.f64 y)) (sqrt.f64 x)) 2) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (pow.f64 (pow.f64 (sin.f64 y) 1/4) 2)) z) |
(+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y))) (*.f64 z (cos.f64 y))) |
(fma.f64 (*.f64 z (sqrt.f64 (cos.f64 y))) (sqrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
(fma.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (sqrt.f64 (sin.f64 y)) (*.f64 z (cos.f64 y))) |
(fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) (cos.f64 y)) (*.f64 (sin.f64 y) x)) |
(fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) (cos.f64 y)) (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 (pow.f64 (cbrt.f64 (sin.f64 y)) 2) (*.f64 (cbrt.f64 (sin.f64 y)) x)) (*.f64 z (cos.f64 y))) |
(+.f64 (*.f64 (*.f64 x (sqrt.f64 (sin.f64 y))) (pow.f64 (pow.f64 (sin.f64 y) 1/4) 2)) (*.f64 z (cos.f64 y))) |
(fma.f64 (*.f64 z (cbrt.f64 (pow.f64 (cos.f64 y) 2))) (cbrt.f64 (cos.f64 y)) (*.f64 x (sin.f64 y))) |
(fma.f64 (*.f64 x (cbrt.f64 (pow.f64 (sin.f64 y) 2))) (cbrt.f64 (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| Outputs |
|---|
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
5 calls:
| 62.0ms | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| 32.0ms | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| 30.0ms | z |
| 23.0ms | x |
| 22.0ms | y |
| Error | Segments | Branch |
|---|---|---|
| 0.1b | 1 | x |
| 0.1b | 1 | y |
| 0.1b | 1 | z |
| 0.1b | 1 | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| 0.1b | 1 | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
Compiled 507 to 167 computations (67.1% saved)
| Inputs |
|---|
z |
z |
(*.f64 y x) |
(+.f64 (*.f64 y x) z) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 z (*.f64 -1/2 (*.f64 y y))) |
(-.f64 (+.f64 1 (*.f64 z (*.f64 -1/2 (*.f64 y y)))) 1) |
(+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(fma.f64 y x z) |
(fma.f64 y x z) |
(*.f64 (sin.f64 y) x) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 x (sin.f64 y)) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
| Outputs |
|---|
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
4 calls:
| 12.0ms | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| 10.0ms | x |
| 10.0ms | z |
| 10.0ms | y |
| Error | Segments | Branch |
|---|---|---|
| 0.1b | 1 | x |
| 0.1b | 1 | y |
| 0.1b | 1 | z |
| 0.1b | 1 | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
Compiled 150 to 65 computations (56.7% saved)
| Inputs |
|---|
z |
z |
(*.f64 y x) |
(+.f64 (*.f64 y x) z) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 z (*.f64 -1/2 (*.f64 y y))) |
(-.f64 (+.f64 1 (*.f64 z (*.f64 -1/2 (*.f64 y y)))) 1) |
(+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(fma.f64 y x z) |
(fma.f64 y x z) |
(*.f64 (sin.f64 y) x) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 x (sin.f64 y)) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| Outputs |
|---|
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
4 calls:
| 49.0ms | y |
| 11.0ms | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
| 10.0ms | z |
| 9.0ms | x |
| Error | Segments | Branch |
|---|---|---|
| 0.1b | 1 | x |
| 0.1b | 1 | y |
| 0.1b | 1 | z |
| 0.1b | 1 | (+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
Compiled 142 to 64 computations (54.9% saved)
| Inputs |
|---|
z |
z |
(*.f64 y x) |
(+.f64 (*.f64 y x) z) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 z (*.f64 -1/2 (*.f64 y y))) |
(-.f64 (+.f64 1 (*.f64 z (*.f64 -1/2 (*.f64 y y)))) 1) |
(+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(fma.f64 y x z) |
(fma.f64 y x z) |
(*.f64 (sin.f64 y) x) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 x (sin.f64 y)) z) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
(+.f64 (*.f64 -1/2 (*.f64 (pow.f64 y 2) z)) (+.f64 (*.f64 y x) z)) |
| Outputs |
|---|
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 x (sin.f64 y)) z) |
(*.f64 (cos.f64 y) z) |
(+.f64 (*.f64 x (sin.f64 y)) z) |
(*.f64 (cos.f64 y) z) |
3 calls:
| 69.0ms | y |
| 38.0ms | z |
| 32.0ms | x |
| Error | Segments | Branch |
|---|---|---|
| 8.5b | 3 | x |
| 10.7b | 4 | y |
| 5.7b | 5 | z |
Compiled 121 to 54 computations (55.4% saved)
| 4× | binary-search |
| Time | Left | Right |
|---|---|---|
| 68.0ms | 87716725260.12997 | 29610547099847.535 |
| 63.0ms | 1.6218222859138105e-133 | 2.601523267934546e-133 |
| 55.0ms | 4.384120464137304e-170 | 1.8235241019479528e-166 |
| 58.0ms | -1.1041014529716775e+25 | -7.374097473638935e+21 |
Compiled 18 to 13 computations (27.8% saved)
| Inputs |
|---|
z |
z |
(*.f64 y x) |
(+.f64 (*.f64 y x) z) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 z (*.f64 -1/2 (*.f64 y y))) |
(-.f64 (+.f64 1 (*.f64 z (*.f64 -1/2 (*.f64 y y)))) 1) |
(+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(fma.f64 y x z) |
(fma.f64 y x z) |
(*.f64 (sin.f64 y) x) |
(*.f64 (cos.f64 y) z) |
| Outputs |
|---|
(*.f64 (sin.f64 y) x) |
(*.f64 (cos.f64 y) z) |
(*.f64 (sin.f64 y) x) |
(*.f64 (cos.f64 y) z) |
(+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (cos.f64 y) z) |
3 calls:
| 63.0ms | y |
| 59.0ms | z |
| 24.0ms | x |
| Error | Segments | Branch |
|---|---|---|
| 15.3b | 3 | x |
| 10.6b | 7 | y |
| 12.4b | 7 | z |
Compiled 89 to 40 computations (55.1% saved)
| 6× | binary-search |
| Time | Left | Right |
|---|---|---|
| 157.0ms | 3.0838474813585634e+193 | 1.6753291705899198e+195 |
| 39.0ms | 2.236350086383115e-18 | 8.968143961225647e-7 |
| 37.0ms | -3.511397279149462 | -0.00013607478070912725 |
| 62.0ms | -3.8631468672212416e+29 | -1.9386270498887087e+20 |
| 34.0ms | -1.0334180033719905e+58 | -4.45450690179577e+54 |
| 65.0ms | -7.47855548357234e+139 | -5.742112648211332e+130 |
Compiled 18 to 13 computations (27.8% saved)
| Inputs |
|---|
z |
z |
(*.f64 y x) |
(+.f64 (*.f64 y x) z) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 z (*.f64 -1/2 (*.f64 y y))) |
(-.f64 (+.f64 1 (*.f64 z (*.f64 -1/2 (*.f64 y y)))) 1) |
(+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) |
(*.f64 (sin.f64 y) x) |
(*.f64 (sin.f64 y) x) |
(fma.f64 y x z) |
(fma.f64 y x z) |
(*.f64 (sin.f64 y) x) |
| Outputs |
|---|
(*.f64 (sin.f64 y) x) |
(+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) |
(*.f64 (sin.f64 y) x) |
3 calls:
| 43.0ms | x |
| 43.0ms | z |
| 22.0ms | y |
| Error | Segments | Branch |
|---|---|---|
| 24.8b | 3 | x |
| 15.8b | 3 | y |
| 23.8b | 5 | z |
Compiled 85 to 38 computations (55.3% saved)
| 2× | binary-search |
| Time | Left | Right |
|---|---|---|
| 32.0ms | 2.236350086383115e-18 | 8.968143961225647e-7 |
| 35.0ms | -196821.13922514336 | -102004.40835487047 |
Compiled 18 to 13 computations (27.8% saved)
| Inputs |
|---|
z |
z |
(*.f64 y x) |
(+.f64 (*.f64 y x) z) |
(*.f64 y (*.f64 -1/2 (*.f64 y z))) |
(*.f64 z (*.f64 -1/2 (*.f64 y y))) |
(-.f64 (+.f64 1 (*.f64 z (*.f64 -1/2 (*.f64 y y)))) 1) |
(+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) |
| Outputs |
|---|
(+.f64 (*.f64 y x) z) |
3 calls:
| 6.0ms | y |
| 6.0ms | x |
| 5.0ms | z |
| Error | Segments | Branch |
|---|---|---|
| 30.3b | 1 | x |
| 30.3b | 1 | y |
| 30.3b | 1 | z |
Compiled 65 to 35 computations (46.2% saved)
| Inputs |
|---|
z |
z |
(*.f64 y x) |
| Outputs |
|---|
(*.f64 y x) |
z |
(*.f64 y x) |
3 calls:
| 12.0ms | x |
| 10.0ms | z |
| 3.0ms | y |
| Error | Segments | Branch |
|---|---|---|
| 35.4b | 3 | x |
| 39.7b | 1 | y |
| 36.5b | 3 | z |
Compiled 20 to 13 computations (35% saved)
| 2× | binary-search |
| Time | Left | Right |
|---|---|---|
| 54.0ms | 3.609989251816531e+78 | 1.1777290780605276e+79 |
| 52.0ms | -3.953974486164688e+88 | -1.0932646505723681e+86 |
Compiled 18 to 13 computations (27.8% saved)
Total -0.0b remaining (-0%)
Threshold costs -0.0b (-0%)
| Inputs |
|---|
z |
z |
| Outputs |
|---|
z |
3 calls:
| 12.0ms | x |
| 3.0ms | z |
| 3.0ms | y |
| Error | Segments | Branch |
|---|---|---|
| 39.7b | 1 | x |
| 39.7b | 1 | y |
| 39.7b | 1 | z |
Compiled 17 to 12 computations (29.4% saved)
| 1× | egg-herbie |
| 5× | +-commutative_binary64 |
| 5× | *-commutative_binary64 |
| 1× | +-lft-identity_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 64 | 261 |
| 1 | 76 | 261 |
| 1× | fuel |
| 1× | saturated |
| Inputs |
|---|
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
(if (<=.f64 z -11041014529716775410466816) (*.f64 (cos.f64 y) z) (if (<=.f64 z 5961146735587331/135971326161092377264534580877431968596375838138120172339057699379303311324378174141225600579898697131235668348479104259928724310439093053288837114564246362097620805333860664072122400768) (+.f64 (*.f64 x (sin.f64 y)) z) (if (<=.f64 z 1036886296559945/6393341031047152089869511126616404594173128996177860916959553453312761321102879990006386899074031556935325554936640763689877454191182408307282280448) (*.f64 (cos.f64 y) z) (if (<=.f64 z 2874301653323939/32768) (+.f64 (*.f64 x (sin.f64 y)) z) (*.f64 (cos.f64 y) z))))) |
(if (<=.f64 y -74785554835723396920563132145846647590859486735153207531484167435375218465182141253686194518359671845528111282894086383150532880840473444352) (*.f64 (sin.f64 y) x) (if (<=.f64 y -10334180033719904643329154150049343201942328708010411556864) (*.f64 (cos.f64 y) z) (if (<=.f64 y -386314686722124158820325261312) (*.f64 (sin.f64 y) x) (if (<=.f64 y -7906963738963645/2251799813685248) (*.f64 (cos.f64 y) z) (if (<=.f64 y 5805896764055569/2596148429267413814265248164610048) (+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) (if (<=.f64 y 30838474813585633975046676979837141466791309232746476653830176576538620691170667869332053724555763074758850223779307693475188811598469548057135294160506119468044114386361962288584586825079717888) (*.f64 (sin.f64 y) x) (*.f64 (cos.f64 y) z))))))) |
(if (<=.f64 y -1690680712266907/8589934592) (*.f64 (sin.f64 y) x) (if (<=.f64 y 5805896764055569/2596148429267413814265248164610048) (+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) (*.f64 (sin.f64 y) x))) |
(+.f64 (*.f64 y x) z) |
(if (<=.f64 x -39539744861646881333389205640405516225510701697493374365876261052610200318083313071816704) (*.f64 y x) (if (<=.f64 x 3609989251816531192635699806628576981357124609164439222929795869205086802542592) z (*.f64 y x))) |
z |
| Outputs |
|---|
(fma.f64 x (sin.f64 y) (*.f64 z (cos.f64 y))) |
(fma.f64 (cos.f64 y) z (*.f64 (sin.f64 y) x)) |
(fma.f64 (cos.f64 y) z (*.f64 x (sin.f64 y))) |
(+.f64 (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y))) |
(if (<=.f64 z -11041014529716775410466816) (*.f64 (cos.f64 y) z) (if (<=.f64 z 5961146735587331/135971326161092377264534580877431968596375838138120172339057699379303311324378174141225600579898697131235668348479104259928724310439093053288837114564246362097620805333860664072122400768) (+.f64 (*.f64 x (sin.f64 y)) z) (if (<=.f64 z 1036886296559945/6393341031047152089869511126616404594173128996177860916959553453312761321102879990006386899074031556935325554936640763689877454191182408307282280448) (*.f64 (cos.f64 y) z) (if (<=.f64 z 2874301653323939/32768) (+.f64 (*.f64 x (sin.f64 y)) z) (*.f64 (cos.f64 y) z))))) |
(if (<=.f64 z -11041014529716775410466816) (*.f64 z (cos.f64 y)) (if (<=.f64 z 5961146735587331/135971326161092377264534580877431968596375838138120172339057699379303311324378174141225600579898697131235668348479104259928724310439093053288837114564246362097620805333860664072122400768) (+.f64 z (*.f64 x (sin.f64 y))) (if (<=.f64 z 1036886296559945/6393341031047152089869511126616404594173128996177860916959553453312761321102879990006386899074031556935325554936640763689877454191182408307282280448) (*.f64 z (cos.f64 y)) (if (<=.f64 z 2874301653323939/32768) (+.f64 z (*.f64 x (sin.f64 y))) (*.f64 z (cos.f64 y)))))) |
(if (<=.f64 y -74785554835723396920563132145846647590859486735153207531484167435375218465182141253686194518359671845528111282894086383150532880840473444352) (*.f64 (sin.f64 y) x) (if (<=.f64 y -10334180033719904643329154150049343201942328708010411556864) (*.f64 (cos.f64 y) z) (if (<=.f64 y -386314686722124158820325261312) (*.f64 (sin.f64 y) x) (if (<=.f64 y -7906963738963645/2251799813685248) (*.f64 (cos.f64 y) z) (if (<=.f64 y 5805896764055569/2596148429267413814265248164610048) (+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) (if (<=.f64 y 30838474813585633975046676979837141466791309232746476653830176576538620691170667869332053724555763074758850223779307693475188811598469548057135294160506119468044114386361962288584586825079717888) (*.f64 (sin.f64 y) x) (*.f64 (cos.f64 y) z))))))) |
(if (<=.f64 y -74785554835723396920563132145846647590859486735153207531484167435375218465182141253686194518359671845528111282894086383150532880840473444352) (*.f64 x (sin.f64 y)) (if (<=.f64 y -10334180033719904643329154150049343201942328708010411556864) (*.f64 z (cos.f64 y)) (if (<=.f64 y -386314686722124158820325261312) (*.f64 x (sin.f64 y)) (if (<=.f64 y -7906963738963645/2251799813685248) (*.f64 z (cos.f64 y)) (if (<=.f64 y 5805896764055569/2596148429267413814265248164610048) (+.f64 (*.f64 (*.f64 z (*.f64 y y)) -1/2) (+.f64 z (*.f64 x y))) (if (<=.f64 y 30838474813585633975046676979837141466791309232746476653830176576538620691170667869332053724555763074758850223779307693475188811598469548057135294160506119468044114386361962288584586825079717888) (*.f64 x (sin.f64 y)) (*.f64 z (cos.f64 y)))))))) |
(if (<=.f64 y -1690680712266907/8589934592) (*.f64 (sin.f64 y) x) (if (<=.f64 y 5805896764055569/2596148429267413814265248164610048) (+.f64 (+.f64 0 (*.f64 (*.f64 (*.f64 y y) z) -1/2)) (+.f64 (*.f64 y x) z)) (*.f64 (sin.f64 y) x))) |
(if (<=.f64 y -1690680712266907/8589934592) (*.f64 x (sin.f64 y)) (if (<=.f64 y 5805896764055569/2596148429267413814265248164610048) (+.f64 (*.f64 (*.f64 z (*.f64 y y)) -1/2) (+.f64 z (*.f64 x y))) (*.f64 x (sin.f64 y)))) |
(+.f64 (*.f64 y x) z) |
(+.f64 z (*.f64 x y)) |
(if (<=.f64 x -39539744861646881333389205640405516225510701697493374365876261052610200318083313071816704) (*.f64 y x) (if (<=.f64 x 3609989251816531192635699806628576981357124609164439222929795869205086802542592) z (*.f64 y x))) |
(if (<=.f64 x -39539744861646881333389205640405516225510701697493374365876261052610200318083313071816704) (*.f64 x y) (if (<=.f64 x 3609989251816531192635699806628576981357124609164439222929795869205086802542592) z (*.f64 x y))) |
z |
Compiled 203 to 110 computations (45.8% saved)
| 1× | egg-herbie |
| 4× | fma-def_binary64 |
| 2× | *-commutative_binary64 |
| 1× | +-commutative_binary64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 12 |
| 1 | 13 | 12 |
| 2 | 16 | 12 |
| 1× | saturated |
Compiled 23 to 15 computations (34.8% saved)
Compiled 179 to 63 computations (64.8% saved)
Loading profile data...