Details

Time bar (total: 3.1s)

analyze199.0ms (6.4%)

Algorithm
search
Search
TrueOtherFalseIter
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
12.5%87.4%0.1%7
18.7%81.1%0.1%8
25%70.2%4.8%9
37.4%56.9%5.6%10
44.5%49.9%5.6%11
50.3%41.3%8.3%12
Compiler

Compiled 11 to 8 computations (27.3% saved)

sample973.0ms (31.6%)

Results
914.0ms8256×body256valid
44.0ms414×body256invalid

preprocess62.0ms (2%)

Algorithm
egg-herbie
Rules
447×fma-def_binary64
313×fma-neg_binary64
108×distribute-rgt-neg-in_binary64
90×cancel-sign-sub-inv_binary64
84×distribute-rgt-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01640
14040
27540
311040
419740
533640
668440
7144140
8165240
9170640
10170940
11170940
12170940
033
Stop Event
saturated
saturated
Calls
Call 1
Inputs
0
1
2
Outputs
0
1
2
Call 2
Inputs
(-.f64 (*.f64 (*.f64 x 3) y) z)
(-.f64 (*.f64 (*.f64 y 3) x) z)
(-.f64 (*.f64 (*.f64 z 3) y) x)
(-.f64 (*.f64 (*.f64 x 3) z) y)
Outputs
(-.f64 (*.f64 (*.f64 x 3) y) z)
(-.f64 (*.f64 x (*.f64 3 y)) z)
(fma.f64 (*.f64 x 3) y (neg.f64 z))
(fma.f64 3 (*.f64 x y) (neg.f64 z))
(-.f64 (*.f64 (*.f64 y 3) x) z)
(-.f64 (*.f64 x (*.f64 3 y)) z)
(fma.f64 (*.f64 x 3) y (neg.f64 z))
(fma.f64 3 (*.f64 x y) (neg.f64 z))
(-.f64 (*.f64 (*.f64 x 3) y) z)
(-.f64 (*.f64 (*.f64 z 3) y) x)
(fma.f64 (*.f64 3 z) y (neg.f64 x))
(-.f64 (*.f64 (*.f64 y z) 3) x)
(fma.f64 3 (*.f64 y z) (neg.f64 x))
(-.f64 (*.f64 y (*.f64 3 z)) x)
(-.f64 (*.f64 z (*.f64 3 y)) x)
(-.f64 (*.f64 (*.f64 x 3) z) y)
(-.f64 (*.f64 3 (*.f64 x z)) y)
(fma.f64 3 (*.f64 x z) (neg.f64 y))
Compiler

Compiled 13 to 10 computations (23.1% saved)

simplify25.0ms (0.8%)

Algorithm
egg-herbie
Rules
192×fma-def_binary64
125×fma-neg_binary64
44×distribute-rgt-neg-in_binary64
37×cancel-sign-sub-inv_binary64
27×unsub-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0810
11510
22910
34210
47610
513310
624610
742210
857910
969810
1074810
1175010
Stop Event
saturated
Counts
1 → 2
Calls
Call 1
Inputs
(-.f64 (*.f64 (*.f64 x 3) y) z)
Outputs
(-.f64 (*.f64 (*.f64 x 3) y) z)
(-.f64 (*.f64 x (*.f64 3 y)) z)

eval1.0ms (0%)

Compiler

Compiled 17 to 11 computations (35.3% saved)

prune1.0ms (0%)

Pruning

3 alts after pruning (3 fresh and 0 done)

PrunedKeptTotal
New022
Fresh011
Picked000
Done000
Total033
Error
0.1b
Counts
3 → 2
Alt Table
Click to see full alt table
StatusErrorProgram
0.1b
(-.f64 (*.f64 x (*.f64 3 y)) z)
0.1b
(-.f64 (*.f64 (*.f64 x 3) y) z)
Compiler

Compiled 20 to 14 computations (30% saved)

localize8.0ms (0.3%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.2b
(*.f64 x (*.f64 3 y))
Compiler

Compiled 22 to 13 computations (40.9% saved)

series6.0ms (0.2%)

Counts
1 → 24
Calls

6 calls:

TimeVariablePointExpression
2.0ms
y
@-inf
(*.f64 x (*.f64 3 y))
1.0ms
y
@0
(*.f64 x (*.f64 3 y))
1.0ms
x
@inf
(*.f64 x (*.f64 3 y))
1.0ms
x
@0
(*.f64 x (*.f64 3 y))
1.0ms
y
@inf
(*.f64 x (*.f64 3 y))

rewrite47.0ms (1.5%)

Algorithm
batch-egg-rewrite
Rules
555×pow1_binary64
511×add-log-exp_binary64
511×log1p-expm1-u_binary64
511×expm1-log1p-u_binary64
501×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
067
11217
213937
Stop Event
node limit
Counts
1 → 11
Calls
Call 1
Inputs
(*.f64 x (*.f64 3 y))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (*.f64 3 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (*.f64 3 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 x) (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (*.f64 3 y))))))))

simplify10.0ms (0.3%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
associate-*r*_binary64
associate-*l*_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
06168
110168
217168
319168
Stop Event
saturated
Counts
35 → 12
Calls
Call 1
Inputs
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
Outputs
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))

localize9.0ms (0.3%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.2b
(*.f64 (*.f64 x 3) y)
Compiler

Compiled 22 to 13 computations (40.9% saved)

series2.0ms (0.1%)

Counts
1 → 24
Calls

6 calls:

TimeVariablePointExpression
0.0ms
x
@0
(*.f64 (*.f64 x 3) y)
0.0ms
x
@inf
(*.f64 (*.f64 x 3) y)
0.0ms
y
@0
(*.f64 (*.f64 x 3) y)
0.0ms
x
@-inf
(*.f64 (*.f64 x 3) y)
0.0ms
y
@inf
(*.f64 (*.f64 x 3) y)

rewrite49.0ms (1.6%)

Algorithm
batch-egg-rewrite
Rules
554×pow1_binary64
510×add-log-exp_binary64
510×log1p-expm1-u_binary64
510×expm1-log1p-u_binary64
500×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
067
11217
213917
Stop Event
node limit
Counts
1 → 11
Calls
Call 1
Inputs
(*.f64 (*.f64 x 3) y)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (*.f64 3 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (*.f64 3 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 y) (*.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (*.f64 3 y))))))))

simplify9.0ms (0.3%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
associate-*r*_binary64
associate-*l*_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
06168
110168
217168
319168
Stop Event
saturated
Counts
35 → 12
Calls
Call 1
Inputs
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
Outputs
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))

eval5.0ms (0.2%)

Compiler

Compiled 231 to 158 computations (31.6% saved)

prune7.0ms (0.2%)

Pruning

5 alts after pruning (3 fresh and 2 done)

PrunedKeptTotal
New21324
Fresh000
Picked011
Done011
Total21526
Error
0.0b
Counts
26 → 5
Alt Table
Click to see full alt table
StatusErrorProgram
0.1b
(-.f64 (*.f64 (*.f64 x 3) y) z)
21.2b
(-.f64 (cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3)) z)
0.5b
(-.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3) z)
0.1b
(-.f64 (*.f64 x (*.f64 3 y)) z)
0.1b
(-.f64 (*.f64 3 (*.f64 y x)) z)
Compiler

Compiled 56 to 41 computations (26.8% saved)

localize18.0ms (0.6%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.2b
(pow.f64 (*.f64 x (*.f64 3 y)) 3)
0.2b
(*.f64 x (*.f64 3 y))
32.3b
(cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3))
Compiler

Compiled 40 to 27 computations (32.5% saved)

series12.0ms (0.4%)

Counts
2 → 48
Calls

12 calls:

TimeVariablePointExpression
3.0ms
x
@-inf
(cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3))
3.0ms
y
@-inf
(cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3))
1.0ms
x
@0
(pow.f64 (*.f64 x (*.f64 3 y)) 3)
1.0ms
y
@0
(pow.f64 (*.f64 x (*.f64 3 y)) 3)
1.0ms
y
@-inf
(pow.f64 (*.f64 x (*.f64 3 y)) 3)

rewrite63.0ms (2.1%)

Algorithm
batch-egg-rewrite
Rules
671×pow1_binary64
628×add-log-exp_binary64
628×log1p-expm1-u_binary64
628×expm1-log1p-u_binary64
611×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0817
117117
2180717
Stop Event
node limit
Counts
2 → 64
Calls
Call 1
Inputs
(cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3))
(pow.f64 (*.f64 x (*.f64 3 y)) 3)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (*.f64 3 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 x (*.f64 3 y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 3 (*.f64 y x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 y (*.f64 x 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 3 y) x)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (*.f64 3 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 x (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 3 y)) 2) (*.f64 (cbrt.f64 (*.f64 3 y)) x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) (pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2) (cbrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 3 y)) (*.f64 (sqrt.f64 (*.f64 3 y)) x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) (sqrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x 3) y)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2) 1/3) (cbrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (*.f64 x (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3/2) 1/3) (pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3/2) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x y) 3)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (pow.f64 (cbrt.f64 (*.f64 3 y)) 2)) (cbrt.f64 (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (sqrt.f64 (*.f64 3 y))) (sqrt.f64 (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 3 y) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 3 y) (sqrt.f64 x)) (sqrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 x 3) 1) y)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 x 3) (pow.f64 (cbrt.f64 y) 2)) (cbrt.f64 y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 x 3) (sqrt.f64 y)) (sqrt.f64 y))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (*.f64 3 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (pow.f64 (exp.f64 3) y) x))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (*.f64 3 y))))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (pow.f64 (*.f64 x (*.f64 3 y)) 3)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 x (*.f64 (*.f64 3 y) (pow.f64 (*.f64 x (*.f64 3 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 3 y) (*.f64 x (pow.f64 (*.f64 x (*.f64 3 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (*.f64 3 y)) (pow.f64 (*.f64 x (*.f64 3 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (pow.f64 (*.f64 x (*.f64 3 y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2) (*.f64 x (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2) (*.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) (pow.f64 (*.f64 x (*.f64 3 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) (*.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) (pow.f64 (*.f64 x (*.f64 3 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 x 3) (*.f64 27 (pow.f64 y 3)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 27 (pow.f64 y 3)) (pow.f64 x 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3/2) (pow.f64 (*.f64 x (*.f64 3 y)) 3/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x 3) (*.f64 y (pow.f64 (*.f64 x (*.f64 3 y)) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2) 3) (*.f64 x (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) 3) (pow.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 x 3) 3) (pow.f64 y 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2) x) (*.f64 3 y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2) (*.f64 3 y)) x)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2) 1) (*.f64 x (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2) (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2)) (cbrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2) (sqrt.f64 (*.f64 x (*.f64 3 y)))) (sqrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2) (*.f64 x 3)) y)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 6))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 3 (log.f64 (*.f64 x (*.f64 3 y)))))))))

simplify141.0ms (4.6%)

Algorithm
egg-herbie
Rules
1127×fma-def_binary64
1056×unswap-sqr_binary64
516×associate-*l*_binary64
405×*-commutative_binary64
387×sqr-pow_binary64
Iterations

Useful iterations: 4 (0.0ms)

IterNodesCost
017512
146512
2137512
3441512
41684440
52218440
62342440
72476440
82907440
93780440
104340440
116029440
126287440
136564440
147929440
Stop Event
node limit
Counts
112 → 68
Calls
Call 1
Inputs
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
Outputs
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(neg.f64 (*.f64 y (*.f64 x (cbrt.f64 -27))))
(*.f64 (*.f64 y (cbrt.f64 -27)) (neg.f64 x))
(*.f64 (*.f64 y x) (neg.f64 (cbrt.f64 -27)))
(*.f64 x (*.f64 (cbrt.f64 -27) (neg.f64 y)))
(*.f64 y (*.f64 x (neg.f64 (cbrt.f64 -27))))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(neg.f64 (*.f64 y (*.f64 x (cbrt.f64 -27))))
(*.f64 (*.f64 y (cbrt.f64 -27)) (neg.f64 x))
(*.f64 (*.f64 y x) (neg.f64 (cbrt.f64 -27)))
(*.f64 x (*.f64 (cbrt.f64 -27) (neg.f64 y)))
(*.f64 y (*.f64 x (neg.f64 (cbrt.f64 -27))))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(neg.f64 (*.f64 y (*.f64 x (cbrt.f64 -27))))
(*.f64 (*.f64 y (cbrt.f64 -27)) (neg.f64 x))
(*.f64 (*.f64 y x) (neg.f64 (cbrt.f64 -27)))
(*.f64 x (*.f64 (cbrt.f64 -27) (neg.f64 y)))
(*.f64 y (*.f64 x (neg.f64 (cbrt.f64 -27))))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(neg.f64 (*.f64 y (*.f64 x (cbrt.f64 -27))))
(*.f64 (*.f64 y (cbrt.f64 -27)) (neg.f64 x))
(*.f64 (*.f64 y x) (neg.f64 (cbrt.f64 -27)))
(*.f64 x (*.f64 (cbrt.f64 -27) (neg.f64 y)))
(*.f64 y (*.f64 x (neg.f64 (cbrt.f64 -27))))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(neg.f64 (*.f64 y (*.f64 x (cbrt.f64 -27))))
(*.f64 (*.f64 y (cbrt.f64 -27)) (neg.f64 x))
(*.f64 (*.f64 y x) (neg.f64 (cbrt.f64 -27)))
(*.f64 x (*.f64 (cbrt.f64 -27) (neg.f64 y)))
(*.f64 y (*.f64 x (neg.f64 (cbrt.f64 -27))))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(neg.f64 (*.f64 y (*.f64 x (cbrt.f64 -27))))
(*.f64 (*.f64 y (cbrt.f64 -27)) (neg.f64 x))
(*.f64 (*.f64 y x) (neg.f64 (cbrt.f64 -27)))
(*.f64 x (*.f64 (cbrt.f64 -27) (neg.f64 y)))
(*.f64 y (*.f64 x (neg.f64 (cbrt.f64 -27))))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(neg.f64 (*.f64 y (*.f64 x (cbrt.f64 -27))))
(*.f64 (*.f64 y (cbrt.f64 -27)) (neg.f64 x))
(*.f64 (*.f64 y x) (neg.f64 (cbrt.f64 -27)))
(*.f64 x (*.f64 (cbrt.f64 -27) (neg.f64 y)))
(*.f64 y (*.f64 x (neg.f64 (cbrt.f64 -27))))
(*.f64 -1 (*.f64 y (*.f64 (cbrt.f64 -27) x)))
(neg.f64 (*.f64 y (*.f64 x (cbrt.f64 -27))))
(*.f64 (*.f64 y (cbrt.f64 -27)) (neg.f64 x))
(*.f64 (*.f64 y x) (neg.f64 (cbrt.f64 -27)))
(*.f64 x (*.f64 (cbrt.f64 -27) (neg.f64 y)))
(*.f64 y (*.f64 x (neg.f64 (cbrt.f64 -27))))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))
(*.f64 27 (*.f64 (pow.f64 y 3) (pow.f64 x 3)))
(*.f64 27 (pow.f64 (*.f64 y x) 3))

localize8.0ms (0.3%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.3b
(*.f64 3 (*.f64 y x))
Compiler

Compiled 22 to 10 computations (54.5% saved)

series2.0ms (0.1%)

Counts
1 → 0
Calls

6 calls:

TimeVariablePointExpression
0.0ms
y
@0
(*.f64 3 (*.f64 y x))
0.0ms
y
@inf
(*.f64 3 (*.f64 y x))
0.0ms
x
@inf
(*.f64 3 (*.f64 y x))
0.0ms
y
@-inf
(*.f64 3 (*.f64 y x))
0.0ms
x
@-inf
(*.f64 3 (*.f64 y x))

rewrite49.0ms (1.6%)

Algorithm
batch-egg-rewrite
Rules
555×pow1_binary64
511×add-log-exp_binary64
511×log1p-expm1-u_binary64
511×expm1-log1p-u_binary64
501×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
067
11217
213937
Stop Event
node limit
Counts
1 → 11
Calls
Call 1
Inputs
(*.f64 3 (*.f64 y x))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 3 (*.f64 y x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 3 (*.f64 y x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 3 (*.f64 y x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 3 (*.f64 y x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (pow.f64 (*.f64 y x) 2) 9))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 3) (*.f64 y x)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 3 (*.f64 y x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 3 (*.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 3 (*.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 3 (*.f64 y x))))))))

simplify7.0ms (0.2%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
000
Stop Event
saturated
Counts
11 → 11
Calls
Call 1
Inputs
Outputs

localize19.0ms (0.6%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.2b
(*.f64 x (*.f64 3 y))
0.6b
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3)
10.0b
(cbrt.f64 (*.f64 x (*.f64 3 y)))
Compiler

Compiled 39 to 26 computations (33.3% saved)

series14.0ms (0.5%)

Counts
2 → 0
Calls

12 calls:

TimeVariablePointExpression
3.0ms
y
@0
(cbrt.f64 (*.f64 x (*.f64 3 y)))
2.0ms
x
@0
(cbrt.f64 (*.f64 x (*.f64 3 y)))
1.0ms
x
@0
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3)
1.0ms
x
@-inf
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3)
1.0ms
y
@inf
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3)

rewrite61.0ms (2%)

Algorithm
batch-egg-rewrite
Rules
661×pow1_binary64
618×add-log-exp_binary64
618×log1p-expm1-u_binary64
618×expm1-log1p-u_binary64
603×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0816
116916
2174016
Stop Event
node limit
Counts
2 → 63
Calls
Call 1
Inputs
(cbrt.f64 (*.f64 x (*.f64 3 y)))
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (cbrt.f64 (*.f64 x (*.f64 3 y)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (cbrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 3 y)) (cbrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 x) (cbrt.f64 (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))) (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))) (pow.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))) 2) (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 1/6) (pow.f64 (*.f64 x (*.f64 3 y)) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 x 3)) (cbrt.f64 y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2) 1/3) (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (cbrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) 1/3) (pow.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 x 3) 1/3) (cbrt.f64 y))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (*.f64 3 y)) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 1/6) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (*.f64 3 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 x (*.f64 3 y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 3 (*.f64 y x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 y (*.f64 x 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 3 y) x)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (*.f64 3 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 x (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2) (cbrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 3 y)) 2) (*.f64 (cbrt.f64 (*.f64 3 y)) x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 x) (*.f64 (cbrt.f64 (*.f64 3 y)) (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))) 2) (*.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))) (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 3 y)) (*.f64 (sqrt.f64 (*.f64 3 y)) x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) (sqrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 1/6) (*.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 1/6) (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x 3) y)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))) 2) 3) (cbrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 1/6) 3) (pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 1/6) 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x y) 3)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (pow.f64 (cbrt.f64 (*.f64 3 y)) 2)) (cbrt.f64 (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (sqrt.f64 (*.f64 3 y))) (sqrt.f64 (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 3 y) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 3 y) (sqrt.f64 x)) (sqrt.f64 x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2) 1) (cbrt.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2) (cbrt.f64 x)) (cbrt.f64 (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2) (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))) 2)) (cbrt.f64 (cbrt.f64 (*.f64 x (*.f64 3 y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2) (pow.f64 (*.f64 x (*.f64 3 y)) 1/6)) (pow.f64 (*.f64 x (*.f64 3 y)) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 x 3) 1) y)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 x 3) (pow.f64 (cbrt.f64 y) 2)) (cbrt.f64 y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (*.f64 x 3) (sqrt.f64 y)) (sqrt.f64 y))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (pow.f64 (exp.f64 3) y) x))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 x 3) (pow.f64 (*.f64 3 y) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 3 y) 3) (pow.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (*.f64 3 y))))))))

simplify10.0ms (0.3%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
000
Stop Event
saturated
Counts
63 → 63
Calls
Call 1
Inputs
Outputs

eval49.0ms (1.6%)

Compiler

Compiled 2185 to 1528 computations (30.1% saved)

prune62.0ms (2%)

Pruning

7 alts after pruning (2 fresh and 5 done)

PrunedKeptTotal
New1642166
Fresh000
Picked011
Done044
Total1647171
Error
0b
Counts
171 → 7
Alt Table
Click to see full alt table
StatusErrorProgram
0.1b
(-.f64 (*.f64 (*.f64 x 3) y) z)
21.2b
(-.f64 (cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3)) z)
0.5b
(-.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3) z)
0.4b
(-.f64 (*.f64 (cbrt.f64 x) (*.f64 (cbrt.f64 (*.f64 3 y)) (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2))) z)
0.1b
(-.f64 (*.f64 x (*.f64 3 y)) z)
0.1b
(-.f64 (*.f64 3 (*.f64 y x)) z)
32.6b
(-.f64 (*.f64 (*.f64 (*.f64 x 3) (sqrt.f64 y)) (sqrt.f64 y)) z)
Compiler

Compiled 91 to 66 computations (27.5% saved)

localize174.0ms (5.7%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.5b
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2)
0.6b
(cbrt.f64 (*.f64 3 y))
0.6b
(cbrt.f64 x)
10.0b
(cbrt.f64 (*.f64 x (*.f64 3 y)))
Compiler

Compiled 83 to 57 computations (31.3% saved)

series10.0ms (0.3%)

Counts
3 → 0
Calls

12 calls:

TimeVariablePointExpression
3.0ms
y
@-inf
(cbrt.f64 (*.f64 3 y))
1.0ms
x
@-inf
(cbrt.f64 x)
1.0ms
x
@inf
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2)
1.0ms
x
@0
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2)
1.0ms
x
@-inf
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2)

rewrite98.0ms (3.2%)

Algorithm
batch-egg-rewrite
Rules
877×pow1_binary64
810×add-log-exp_binary64
809×log1p-expm1-u_binary64
809×expm1-log1p-u_binary64
789×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01121
121921
2234021
Stop Event
node limit
Counts
3 → 57
Calls
Call 1
Inputs
(cbrt.f64 x)
(cbrt.f64 (*.f64 3 y))
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2)
Outputs
((#(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 3 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 3 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (cbrt.f64 (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 y) (cbrt.f64 3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (cbrt.f64 (*.f64 3 y))) (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 3 y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 3 y))) 2) (cbrt.f64 (cbrt.f64 (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 3) (cbrt.f64 y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 3 y) 1/6) (pow.f64 (*.f64 3 y) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (cbrt.f64 (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (*.f64 3 y)) 2) 1/3) (cbrt.f64 (cbrt.f64 (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (*.f64 3 y)) 1/3) (pow.f64 (sqrt.f64 (*.f64 3 y)) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 3 y) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 3 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 3 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 3 y) 1/6) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 (*.f64 3 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (cbrt.f64 (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (cbrt.f64 (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (cbrt.f64 (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (cbrt.f64 (*.f64 3 y))))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (pow.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) 2)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 x) (*.f64 (cbrt.f64 (*.f64 3 y)) (cbrt.f64 (*.f64 3 (*.f64 y x)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) (cbrt.f64 (*.f64 3 (*.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) 2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (pow.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 x) 2) (pow.f64 (cbrt.f64 (*.f64 3 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 3 (*.f64 y x)))) 2) (cbrt.f64 (pow.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) 4)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 3 (*.f64 y x)))) 2) (*.f64 (cbrt.f64 (cbrt.f64 (*.f64 3 (*.f64 y x)))) (cbrt.f64 (*.f64 3 (*.f64 y x)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (pow.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) 4)) (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 3 (*.f64 y x)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 3 (*.f64 y x))) (pow.f64 (*.f64 3 (*.f64 y x)) 1/6))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (*.f64 3 (*.f64 y x)) 1/6) (*.f64 (pow.f64 (*.f64 3 (*.f64 y x)) 1/6) (cbrt.f64 (*.f64 3 (*.f64 y x)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) (cbrt.f64 x)) (cbrt.f64 (*.f64 3 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 3 (*.f64 y x)))) 2)) (cbrt.f64 (cbrt.f64 (*.f64 3 (*.f64 y x)))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) 4))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 3 (*.f64 y x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 2 (log.f64 (cbrt.f64 (*.f64 3 (*.f64 y x))))))))))

simplify8.0ms (0.3%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
000
Stop Event
saturated
Counts
57 → 57
Calls
Call 1
Inputs
Outputs

localize154.0ms (5%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.1b
(*.f64 (*.f64 (*.f64 x 3) (sqrt.f64 y)) (sqrt.f64 y))
0.2b
(*.f64 (*.f64 x 3) (sqrt.f64 y))
Compiler

Compiled 38 to 19 computations (50% saved)

series7.0ms (0.2%)

Counts
2 → 36
Calls

12 calls:

TimeVariablePointExpression
1.0ms
y
@-inf
(*.f64 (*.f64 (*.f64 x 3) (sqrt.f64 y)) (sqrt.f64 y))
1.0ms
x
@0
(*.f64 (*.f64 x 3) (sqrt.f64 y))
1.0ms
y
@0
(*.f64 (*.f64 x 3) (sqrt.f64 y))
1.0ms
y
@-inf
(*.f64 (*.f64 x 3) (sqrt.f64 y))
1.0ms
x
@inf
(*.f64 (*.f64 x 3) (sqrt.f64 y))

rewrite72.0ms (2.3%)

Algorithm
batch-egg-rewrite
Rules
736×pow1_binary64
679×add-log-exp_binary64
679×log1p-expm1-u_binary64
679×expm1-log1p-u_binary64
664×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0816
116216
2189216
Stop Event
node limit
Counts
2 → 27
Calls
Call 1
Inputs
(*.f64 (*.f64 x 3) (sqrt.f64 y))
(*.f64 (*.f64 (*.f64 x 3) (sqrt.f64 y)) (sqrt.f64 y))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (*.f64 (sqrt.f64 y) x) 3)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (*.f64 (sqrt.f64 y) x) 3) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (*.f64 (sqrt.f64 y) x) 3) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (*.f64 (sqrt.f64 y) x) 3)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (*.f64 (sqrt.f64 y) x) 3)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 y (*.f64 (*.f64 x x) 9)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (sqrt.f64 y)) (*.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (*.f64 (sqrt.f64 y) x) 3) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 x 3) 3) (pow.f64 y 3/2)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 y 3/2) (pow.f64 (*.f64 x 3) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (*.f64 (sqrt.f64 y) x) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (*.f64 (sqrt.f64 y) x) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (*.f64 (sqrt.f64 y) x) 3)))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (*.f64 3 y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (*.f64 3 y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x (*.f64 3 y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (pow.f64 (exp.f64 x) 3) y))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 x 3) 3) (pow.f64 y 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 y 3/2) (pow.f64 (*.f64 (*.f64 (sqrt.f64 y) x) 3) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 (*.f64 (sqrt.f64 y) x) 3) 3) (pow.f64 y 3/2)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (*.f64 3 y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (*.f64 3 y))))))))

simplify223.0ms (7.2%)

Algorithm
egg-herbie
Rules
684×fma-def_binary64
651×fabs-mul_binary64
630×cube-prod_binary64
590×sqr-pow_binary64
450×associate-*l*_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
016276
135276
283276
3162276
4383276
51268276
61641276
72014276
82615276
93066276
103417276
113792276
124178276
134650276
145139276
156460276
167397276
Stop Event
node limit
Counts
63 → 32
Calls
Call 1
Inputs
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 3 (*.f64 y x))
(*.f64 -3 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 y x)))
(*.f64 -3 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 y x)))
(*.f64 -3 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 y x)))
(*.f64 -3 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 y x)))
Outputs
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 (sqrt.f64 y) x))
(*.f64 (sqrt.f64 y) (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 3 (*.f64 y x))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 -3 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 y x)))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 3 (*.f64 y x))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 -3 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 y x)))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 3 (*.f64 y x))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 -3 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 y x)))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 3 (*.f64 y x))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))
(*.f64 -3 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 y x)))
(*.f64 (*.f64 3 y) x)
(*.f64 y (*.f64 x 3))
(*.f64 3 (*.f64 y x))
(*.f64 x (*.f64 3 y))
(*.f64 y (*.f64 3 x))

eval68.0ms (2.2%)

Compiler

Compiled 2178 to 1458 computations (33.1% saved)

prune159.0ms (5.2%)

Pruning

7 alts after pruning (0 fresh and 7 done)

PrunedKeptTotal
New1120112
Fresh000
Picked011
Done066
Total1127119
Error
0b
Counts
119 → 7
Alt Table
Click to see full alt table
StatusErrorProgram
0.1b
(-.f64 (*.f64 (*.f64 x 3) y) z)
21.2b
(-.f64 (cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3)) z)
0.5b
(-.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3) z)
0.4b
(-.f64 (*.f64 (cbrt.f64 x) (*.f64 (cbrt.f64 (*.f64 3 y)) (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2))) z)
0.1b
(-.f64 (*.f64 x (*.f64 3 y)) z)
0.1b
(-.f64 (*.f64 3 (*.f64 y x)) z)
32.6b
(-.f64 (*.f64 (*.f64 (*.f64 x 3) (sqrt.f64 y)) (sqrt.f64 y)) z)
Compiler

Compiled 91 to 66 computations (27.5% saved)

regimes73.0ms (2.4%)

Accuracy

Total -41.3b remaining (-35257.8%)

Threshold costs -41.3b (-35257.8%)

Counts
7 → 1
Calls
Call 1
Inputs
(-.f64 (*.f64 3 (*.f64 y x)) z)
(-.f64 (*.f64 x (*.f64 3 y)) z)
(-.f64 (*.f64 (*.f64 x 3) y) z)
(-.f64 (cbrt.f64 (pow.f64 (*.f64 x (*.f64 3 y)) 3)) z)
(-.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 3) z)
(-.f64 (*.f64 (*.f64 (*.f64 x 3) (sqrt.f64 y)) (sqrt.f64 y)) z)
(-.f64 (*.f64 (cbrt.f64 x) (*.f64 (cbrt.f64 (*.f64 3 y)) (pow.f64 (cbrt.f64 (*.f64 x (*.f64 3 y))) 2))) z)
Outputs
(-.f64 (*.f64 x (*.f64 3 y)) z)
Calls

7 calls:

33.0ms
x
10.0ms
(*.f64 x 3)
7.0ms
z
5.0ms
(-.f64 (*.f64 (*.f64 x 3) y) z)
5.0ms
(*.f64 x 3)
Results
ErrorSegmentsBranch
0.1b1x
0.1b1y
0.1b1z
0.1b1(-.f64 (*.f64 (*.f64 x 3) y) z)
0.1b1(*.f64 (*.f64 x 3) y)
0.1b1(*.f64 x 3)
0.1b1(*.f64 x 3)
Compiler

Compiled 115 to 80 computations (30.4% saved)

simplify5.0ms (0.2%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
+-commutative_binary64
sub-neg_binary64
neg-sub0_binary64
neg-mul-1_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01120
11820
22420
32620
42720
Stop Event
done
saturated
Calls
Call 1
Inputs
(-.f64 (*.f64 x (*.f64 3 y)) z)
(-.f64 (*.f64 3 (*.f64 y x)) z)
Outputs
(-.f64 (*.f64 x (*.f64 3 y)) z)
(-.f64 (*.f64 3 (*.f64 y x)) z)
(-.f64 (*.f64 3 (*.f64 x y)) z)
Compiler

Compiled 20 to 14 computations (30% saved)

soundness47.0ms (1.5%)

Algorithm
egg-herbie
Rules
192×fma-def_binary64
125×fma-neg_binary64
44×distribute-rgt-neg-in_binary64
37×cancel-sign-sub-inv_binary64
27×unsub-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0810
11510
22910
34210
47610
513310
624610
742210
857910
969810
1074810
1175010
Stop Event
saturated
Compiler

Compiled 20 to 14 computations (30% saved)

end54.0ms (1.8%)

Compiler

Compiled 17 to 11 computations (35.3% saved)

Profiling

Loading profile data...