Details

Time bar (total: 4.4s)

analyze83.0ms (1.9%)

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
25%74.9%0.1%5
37.5%62.4%0.1%6
43.7%43.7%12.6%7
53.1%34.3%12.6%8
57.8%23.4%18.8%9
63.2%18%18.8%10
66%12.1%22%11
68.9%9.2%22%12
Compiler

Compiled 8 to 5 computations (37.5% saved)

sample888.0ms (20.2%)

Results
844.0ms8256×body256valid
31.0ms330×body256invalid

preprocess17.0ms (0.4%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
0714
11414
21614
022
Stop Event
saturated
saturated
Calls
Call 1
Inputs
0
1
Outputs
0
1
Call 2
Inputs
(*.f64 (*.f64 x y) y)
(*.f64 (*.f64 y x) x)
Outputs
(*.f64 (*.f64 x y) y)
(*.f64 x (*.f64 y y))
(*.f64 (*.f64 y x) x)
(*.f64 y (*.f64 x x))
Compiler

Compiled 9 to 6 computations (33.3% saved)

simplify11.0ms (0.3%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
057
197
2107
Stop Event
saturated
Counts
1 → 2
Calls
Call 1
Inputs
(*.f64 (*.f64 x y) y)
Outputs
(*.f64 (*.f64 x y) y)
(*.f64 x (*.f64 y y))

eval1.0ms (0%)

Compiler

Compiled 12 to 6 computations (50% saved)

prune2.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
9.2b
(*.f64 x (*.f64 y y))
0.2b
(*.f64 (*.f64 x y) y)
Compiler

Compiled 14 to 8 computations (42.9% saved)

localize8.0ms (0.2%)

Local error

Found 1 expressions with local error:

NewErrorProgram
9.0b
(*.f64 x (*.f64 y y))
Compiler

Compiled 12 to 4 computations (66.7% saved)

series7.0ms (0.2%)

Counts
1 → 24
Calls

6 calls:

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

rewrite57.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
458×pow1_binary64
435×add-sqr-sqrt_binary64
429×*-un-lft-identity_binary64
421×add-log-exp_binary64
421×log1p-expm1-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify180.0ms (4.1%)

Algorithm
egg-herbie
Rules
1082×sqr-pow_binary64
617×cube-prod_binary64
551×fabs-mul_binary64
523×pow-sqr_binary64
445×associate-*l*_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
06168
112168
223168
344168
4105168
5332168
61258168
72133168
82297168
92481168
102689168
112985168
123378168
133859168
144425168
155113168
165948168
176336168
186624168
196900168
206970168
217006168
227947168
Stop Event
node limit
Counts
35 → 13
Calls
Call 1
Inputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
Outputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))

localize6.0ms (0.1%)

Local error

Found 1 expressions with local error:

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

Compiled 12 to 4 computations (66.7% saved)

series2.0ms (0%)

Counts
1 → 24
Calls

6 calls:

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

rewrite46.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
471×pow1_binary64
447×add-sqr-sqrt_binary64
442×*-un-lft-identity_binary64
431×add-log-exp_binary64
431×log1p-expm1-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify185.0ms (4.2%)

Algorithm
egg-herbie
Rules
1082×sqr-pow_binary64
617×cube-prod_binary64
551×fabs-mul_binary64
523×pow-sqr_binary64
445×associate-*l*_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
06168
112168
223168
344168
4105168
5332168
61258168
72133168
82297168
92481168
102689168
112985168
123378168
133859168
144425168
155113168
165948168
176336168
186624168
196900168
206970168
217006168
227947168
Stop Event
node limit
Counts
35 → 13
Calls
Call 1
Inputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
Outputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))

eval4.0ms (0.1%)

Compiler

Compiled 188 to 71 computations (62.2% saved)

prune5.0ms (0.1%)

Pruning

4 alts after pruning (2 fresh and 2 done)

PrunedKeptTotal
New24226
Fresh000
Picked011
Done011
Total24428
Error
0.1b
Counts
28 → 4
Alt Table
Click to see full alt table
StatusErrorProgram
0.2b
(*.f64 (*.f64 x y) y)
30.5b
(pow.f64 (*.f64 (sqrt.f64 x) y) 2)
9.8b
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 3)
9.2b
(*.f64 x (*.f64 y y))
Compiler

Compiled 32 to 21 computations (34.4% saved)

localize12.0ms (0.3%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.5b
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 3)
9.0b
(*.f64 x (*.f64 y y))
20.6b
(cbrt.f64 (*.f64 x (*.f64 y y)))
Compiler

Compiled 27 to 8 computations (70.4% saved)

series36.0ms (0.8%)

Counts
2 → 0
Calls

12 calls:

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

rewrite98.0ms (2.2%)

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

Useful iterations: 0 (0.0ms)

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

simplify7.0ms (0.2%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

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

localize7.0ms (0.2%)

Local error

Found 2 expressions with local error:

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

Compiled 17 to 7 computations (58.8% saved)

series13.0ms (0.3%)

Counts
2 → 24
Calls

12 calls:

TimeVariablePointExpression
5.0ms
x
@0
(pow.f64 (*.f64 (sqrt.f64 x) y) 2)
2.0ms
x
@-inf
(pow.f64 (*.f64 (sqrt.f64 x) y) 2)
2.0ms
y
@inf
(pow.f64 (*.f64 (sqrt.f64 x) y) 2)
1.0ms
y
@0
(pow.f64 (*.f64 (sqrt.f64 x) y) 2)
1.0ms
x
@inf
(pow.f64 (*.f64 (sqrt.f64 x) y) 2)

rewrite137.0ms (3.1%)

Algorithm
batch-egg-rewrite
Rules
584×pow1_binary64
539×add-log-exp_binary64
539×log1p-expm1-u_binary64
539×expm1-log1p-u_binary64
523×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify173.0ms (3.9%)

Algorithm
egg-herbie
Rules
1101×sqr-pow_binary64
565×cube-prod_binary64
560×fabs-mul_binary64
528×pow-sqr_binary64
513×associate-*l*_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
08156
115156
226156
352156
4127156
5386156
61460156
72351156
82515156
92728156
102948156
113251156
123653156
134146156
144714156
155406156
166241156
176631156
186921156
197195156
207267156
217301156
Stop Event
node limit
Counts
59 → 38
Calls
Call 1
Inputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
Outputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))
(*.f64 y (sqrt.f64 x))

eval20.0ms (0.5%)

Compiler

Compiled 1142 to 395 computations (65.4% saved)

prune60.0ms (1.4%)

Pruning

9 alts after pruning (5 fresh and 4 done)

PrunedKeptTotal
New1035108
Fresh000
Picked011
Done033
Total1039112
Error
0.0b
Counts
112 → 9
Alt Table
Click to see full alt table
StatusErrorProgram
9.8b
(*.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 2) (cbrt.f64 x)) (cbrt.f64 (*.f64 y y)))
9.8b
(*.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) (*.f64 y y)))
0.2b
(*.f64 (*.f64 x y) y)
30.5b
(pow.f64 (*.f64 (sqrt.f64 x) y) 2)
30.2b
(*.f64 (*.f64 (*.f64 x y) (sqrt.f64 y)) (sqrt.f64 y))
1.2b
(pow.f64 (*.f64 (cbrt.f64 (*.f64 x y)) (cbrt.f64 y)) 3)
9.8b
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 3)
41.9b
(*.f64 (*.f64 (*.f64 (sqrt.f64 x) y) (sqrt.f64 (*.f64 (sqrt.f64 x) y))) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
9.2b
(*.f64 x (*.f64 y y))
Compiler

Compiled 174 to 101 computations (42% saved)

localize12.0ms (0.3%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.3b
(*.f64 (cbrt.f64 (*.f64 x y)) (cbrt.f64 y))
0.5b
(pow.f64 (*.f64 (cbrt.f64 (*.f64 x y)) (cbrt.f64 y)) 3)
0.6b
(cbrt.f64 y)
9.9b
(cbrt.f64 (*.f64 x y))
Compiler

Compiled 30 to 9 computations (70% saved)

series11.0ms (0.3%)

Counts
4 → 0
Calls

21 calls:

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

rewrite111.0ms (2.5%)

Algorithm
batch-egg-rewrite
Rules
782×pow1_binary64
728×add-log-exp_binary64
728×log1p-expm1-u_binary64
728×expm1-log1p-u_binary64
706×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify8.0ms (0.2%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

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

localize11.0ms (0.2%)

Local error

Found 2 expressions with local error:

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

Compiled 24 to 6 computations (75% saved)

series8.0ms (0.2%)

Counts
2 → 36
Calls

12 calls:

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

rewrite56.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
649×pow1_binary64
596×add-log-exp_binary64
596×log1p-expm1-u_binary64
596×expm1-log1p-u_binary64
581×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify70.0ms (1.6%)

Algorithm
egg-herbie
Rules
1130×fma-def_binary64
350×distribute-rgt-neg-in_binary64
339×associate-*l*_binary64
309×distribute-lft-neg-in_binary64
308×*-commutative_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
015276
139276
2103252
3315252
41540252
53988252
65811252
77523252
Stop Event
unsound
Counts
58 → 27
Calls
Call 1
Inputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
Outputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))
(*.f64 (sqrt.f64 (pow.f64 y 3)) x)
(*.f64 x (sqrt.f64 (pow.f64 y 3)))
(*.f64 x (pow.f64 y 3/2))

localize15.0ms (0.3%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.5b
(pow.f64 (cbrt.f64 x) 2)
0.6b
(cbrt.f64 x)
1.9b
(*.f64 (cbrt.f64 x) (*.f64 y y))
7.1b
(*.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) (*.f64 y y)))
Compiler

Compiled 31 to 11 computations (64.5% saved)

series31.0ms (0.7%)

Counts
4 → 36
Calls

18 calls:

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

rewrite74.0ms (1.7%)

Algorithm
batch-egg-rewrite
Rules
759×pow1_binary64
700×add-log-exp_binary64
700×log1p-expm1-u_binary64
700×expm1-log1p-u_binary64
681×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify191.0ms (4.3%)

Algorithm
egg-herbie
Rules
924×unswap-sqr_binary64
794×sqr-pow_binary64
731×cube-prod_binary64
648×fabs-mul_binary64
399×unpow3_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
011276
127276
260276
3151276
4580276
51069276
62476276
72579276
82734276
92911276
103112276
113379276
123720276
134126276
144653276
155322276
166167276
176607276
187043276
197441276
207753276
217935276
Stop Event
node limit
Counts
99 → 67
Calls
Call 1
Inputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
Outputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))
(*.f64 (pow.f64 (*.f64 1 x) 1/3) (pow.f64 y 2))
(*.f64 (*.f64 y y) (cbrt.f64 x))
(*.f64 y (*.f64 y (cbrt.f64 x)))

localize22.0ms (0.5%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.7b
(*.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 2) (cbrt.f64 x))
9.0b
(*.f64 x (*.f64 y y))
20.6b
(cbrt.f64 (*.f64 x (*.f64 y y)))
22.9b
(cbrt.f64 (*.f64 y y))
Compiler

Compiled 60 to 17 computations (71.7% saved)

series9.0ms (0.2%)

Counts
2 → 12
Calls

9 calls:

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

rewrite65.0ms (1.5%)

Algorithm
batch-egg-rewrite
Rules
871×pow1_binary64
801×add-log-exp_binary64
801×log1p-expm1-u_binary64
801×expm1-log1p-u_binary64
776×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify165.0ms (3.7%)

Algorithm
egg-herbie
Rules
1190×sqr-pow_binary64
780×cube-prod_binary64
638×pow-sqr_binary64
625×fabs-mul_binary64
412×unswap-sqr_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
010108
124108
243108
376108
4167108
5497108
6780108
71442108
81572108
91752108
101980108
112322108
122779108
133368108
144103108
155044108
165545108
175998108
186360108
196630108
206738108
217977108
Stop Event
node limit
Counts
43 → 33
Calls
Call 1
Inputs
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
Outputs
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 y 4)) 1/3) x)
(*.f64 (cbrt.f64 (pow.f64 y 4)) x)
(*.f64 x (cbrt.f64 (pow.f64 y 4)))

localize11.0ms (0.3%)

Local error

Found 4 expressions with local error:

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

Compiled 41 to 7 computations (82.9% saved)

series82.0ms (1.9%)

Counts
3 → 48
Calls

18 calls:

TimeVariablePointExpression
36.0ms
x
@0
(sqrt.f64 (*.f64 (sqrt.f64 x) y))
17.0ms
x
@inf
(*.f64 (*.f64 (sqrt.f64 x) y) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
9.0ms
x
@inf
(sqrt.f64 (*.f64 (sqrt.f64 x) y))
8.0ms
x
@0
(*.f64 (*.f64 (sqrt.f64 x) y) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
2.0ms
x
@-inf
(*.f64 (*.f64 (sqrt.f64 x) y) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))

rewrite57.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
663×pow1_binary64
610×add-log-exp_binary64
610×log1p-expm1-u_binary64
610×expm1-log1p-u_binary64
592×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify73.0ms (1.7%)

Algorithm
egg-herbie
Rules
852×fma-def_binary64
514×distribute-rgt-neg-in_binary64
393×distribute-lft-neg-in_binary64
244×*-commutative_binary64
236×cube-prod_binary64
Iterations

Useful iterations: 4 (0.0ms)

IterNodesCost
035524
193524
2264504
3768500
41627496
52779496
64626496
76674496
Stop Event
unsound
Counts
95 → 57
Calls
Call 1
Inputs
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 -1 x) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) y)))
(*.f64 (pow.f64 (*.f64 -1 x) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) y)))
(*.f64 (pow.f64 (*.f64 -1 x) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) y)))
(*.f64 (pow.f64 (*.f64 -1 x) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) y)))
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (*.f64 -1 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 (sqrt.f64 -1) 3) (pow.f64 y 3))))
(*.f64 (pow.f64 (*.f64 -1 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 (sqrt.f64 -1) 3) (pow.f64 y 3))))
(*.f64 (pow.f64 (*.f64 -1 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 (sqrt.f64 -1) 3) (pow.f64 y 3))))
(*.f64 (pow.f64 (*.f64 -1 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 (sqrt.f64 -1) 3) (pow.f64 y 3))))
Outputs
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 x 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 x 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 x 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 x 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 x 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 x 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 x 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 1 x) 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 x 1/4) (sqrt.f64 y))
(*.f64 (pow.f64 (*.f64 -1 x) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) y)))
(*.f64 (pow.f64 (neg.f64 x) 1/4) (sqrt.f64 (*.f64 y (sqrt.f64 -1))))
(*.f64 (pow.f64 (*.f64 -1 x) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) y)))
(*.f64 (pow.f64 (neg.f64 x) 1/4) (sqrt.f64 (*.f64 y (sqrt.f64 -1))))
(*.f64 (pow.f64 (*.f64 -1 x) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) y)))
(*.f64 (pow.f64 (neg.f64 x) 1/4) (sqrt.f64 (*.f64 y (sqrt.f64 -1))))
(*.f64 (pow.f64 (*.f64 -1 x) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) y)))
(*.f64 (pow.f64 (neg.f64 x) 1/4) (sqrt.f64 (*.f64 y (sqrt.f64 -1))))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (fabs.f64 (pow.f64 y 3/2)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (pow.f64 y 3/2))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (fabs.f64 (pow.f64 y 3/2)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (pow.f64 y 3/2))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (fabs.f64 (pow.f64 y 3/2)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (pow.f64 y 3/2))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (fabs.f64 (pow.f64 y 3/2)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (pow.f64 y 3/2))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (fabs.f64 (pow.f64 y 3/2)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (pow.f64 y 3/2))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (fabs.f64 (pow.f64 y 3/2)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (pow.f64 y 3/2))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (fabs.f64 (pow.f64 y 3/2)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (pow.f64 y 3/2))
(*.f64 (pow.f64 (*.f64 1 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (sqrt.f64 (pow.f64 y 3)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (fabs.f64 (pow.f64 y 3/2)))
(*.f64 (pow.f64 (pow.f64 x 3) 1/4) (pow.f64 y 3/2))
(*.f64 (pow.f64 (*.f64 -1 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 (sqrt.f64 -1) 3) (pow.f64 y 3))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 y 3) (pow.f64 (sqrt.f64 -1) 3))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) (*.f64 -1 (pow.f64 y 3)))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) (neg.f64 (pow.f64 y 3)))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 -1) 3/2)))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 (*.f64 y (sqrt.f64 -1)) 3)))
(*.f64 (pow.f64 (pow.f64 (neg.f64 x) 3) 1/4) (sqrt.f64 (pow.f64 (*.f64 y (sqrt.f64 -1)) 3)))
(*.f64 (pow.f64 (*.f64 -1 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 (sqrt.f64 -1) 3) (pow.f64 y 3))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 y 3) (pow.f64 (sqrt.f64 -1) 3))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) (*.f64 -1 (pow.f64 y 3)))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) (neg.f64 (pow.f64 y 3)))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 -1) 3/2)))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 (*.f64 y (sqrt.f64 -1)) 3)))
(*.f64 (pow.f64 (pow.f64 (neg.f64 x) 3) 1/4) (sqrt.f64 (pow.f64 (*.f64 y (sqrt.f64 -1)) 3)))
(*.f64 (pow.f64 (*.f64 -1 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 (sqrt.f64 -1) 3) (pow.f64 y 3))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 y 3) (pow.f64 (sqrt.f64 -1) 3))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) (*.f64 -1 (pow.f64 y 3)))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) (neg.f64 (pow.f64 y 3)))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 -1) 3/2)))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 (*.f64 y (sqrt.f64 -1)) 3)))
(*.f64 (pow.f64 (pow.f64 (neg.f64 x) 3) 1/4) (sqrt.f64 (pow.f64 (*.f64 y (sqrt.f64 -1)) 3)))
(*.f64 (pow.f64 (*.f64 -1 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 (sqrt.f64 -1) 3) (pow.f64 y 3))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (pow.f64 y 3) (pow.f64 (sqrt.f64 -1) 3))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) (*.f64 -1 (pow.f64 y 3)))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (*.f64 (sqrt.f64 -1) (neg.f64 (pow.f64 y 3)))))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 -1) 3/2)))
(*.f64 (pow.f64 (neg.f64 (pow.f64 x 3)) 1/4) (sqrt.f64 (pow.f64 (*.f64 y (sqrt.f64 -1)) 3)))
(*.f64 (pow.f64 (pow.f64 (neg.f64 x) 3) 1/4) (sqrt.f64 (pow.f64 (*.f64 y (sqrt.f64 -1)) 3)))

eval84.0ms (1.9%)

Compiler

Compiled 5884 to 1988 computations (66.2% saved)

prune65.0ms (1.5%)

Pruning

11 alts after pruning (5 fresh and 6 done)

PrunedKeptTotal
New3865391
Fresh000
Picked101
Done268
Total38911400
Error
0.0b
Counts
400 → 11
Alt Table
Click to see full alt table
StatusErrorProgram
0.2b
(*.f64 (*.f64 x y) y)
30.5b
(pow.f64 (*.f64 (sqrt.f64 x) y) 2)
30.2b
(*.f64 (*.f64 (*.f64 x y) (sqrt.f64 y)) (sqrt.f64 y))
11.7b
(*.f64 (cbrt.f64 (pow.f64 (*.f64 x y) 2)) (*.f64 (cbrt.f64 (*.f64 x y)) y))
1.2b
(pow.f64 (*.f64 (cbrt.f64 (*.f64 x y)) (cbrt.f64 y)) 3)
24.2b
(pow.f64 (*.f64 (sqrt.f64 (cbrt.f64 (pow.f64 (*.f64 x y) 2))) (cbrt.f64 y)) 3)
9.8b
(*.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 2) (cbrt.f64 y)) (cbrt.f64 (*.f64 x y)))
9.8b
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 3)
41.9b
(*.f64 (pow.f64 (*.f64 (sqrt.f64 x) y) 3/2) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
21.7b
(*.f64 (sqrt.f64 (*.f64 x y)) (*.f64 (sqrt.f64 (*.f64 x y)) y))
9.2b
(*.f64 x (*.f64 y y))
Compiler

Compiled 202 to 127 computations (37.1% saved)

localize22.0ms (0.5%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.6b
(cbrt.f64 y)
9.0b
(*.f64 x (*.f64 y y))
9.9b
(cbrt.f64 (*.f64 x y))
20.6b
(cbrt.f64 (*.f64 x (*.f64 y y)))
Compiler

Compiled 63 to 18 computations (71.4% saved)

localize8.0ms (0.2%)

Local error

Found 3 expressions with local error:

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

Compiled 28 to 6 computations (78.6% saved)

series10.0ms (0.2%)

Counts
3 → 24
Calls

18 calls:

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

rewrite66.0ms (1.5%)

Algorithm
batch-egg-rewrite
Rules
652×pow1_binary64
599×add-log-exp_binary64
599×log1p-expm1-u_binary64
599×expm1-log1p-u_binary64
584×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify80.0ms (1.8%)

Algorithm
egg-herbie
Rules
1282×fma-def_binary64
358×fma-neg_binary64
347×distribute-rgt-neg-in_binary64
321×neg-sub0_binary64
311×distribute-lft-neg-out_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
011168
127168
284168
3275168
41373168
53438168
65133168
76563168
87082168
Stop Event
node limit
Counts
68 → 47
Calls
Call 1
Inputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
Outputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))

localize17.0ms (0.4%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.2b
(pow.f64 (*.f64 x y) 2)
0.2b
(*.f64 (cbrt.f64 (pow.f64 (*.f64 x y) 2)) (*.f64 (cbrt.f64 (*.f64 x y)) y))
9.9b
(cbrt.f64 (*.f64 x y))
27.3b
(cbrt.f64 (pow.f64 (*.f64 x y) 2))
Compiler

Compiled 42 to 15 computations (64.3% saved)

series14.0ms (0.3%)

Counts
3 → 48
Calls

18 calls:

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

rewrite66.0ms (1.5%)

Algorithm
batch-egg-rewrite
Rules
844×pow1_binary64
778×add-log-exp_binary64
778×log1p-expm1-u_binary64
778×expm1-log1p-u_binary64
756×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify119.0ms (2.7%)

Algorithm
egg-herbie
Rules
877×fma-def_binary64
506×distribute-rgt-neg-out_binary64
440×distribute-lft-neg-in_binary64
437×distribute-rgt-neg-in_binary64
420×fma-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
013464
131464
289464
3292464
41270464
52522464
63333464
74391464
85545464
96330464
107234464
Stop Event
node limit
Counts
111 → 69
Calls
Call 1
Inputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
Outputs
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(neg.f64 (*.f64 (*.f64 (*.f64 y y) (cbrt.f64 -1)) x))
(*.f64 (*.f64 y y) (neg.f64 (*.f64 x (cbrt.f64 -1))))
(*.f64 y (*.f64 (*.f64 y (cbrt.f64 -1)) (neg.f64 x)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 (neg.f64 x) y)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 y (neg.f64 x))))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(neg.f64 (*.f64 (*.f64 (*.f64 y y) (cbrt.f64 -1)) x))
(*.f64 (*.f64 y y) (neg.f64 (*.f64 x (cbrt.f64 -1))))
(*.f64 y (*.f64 (*.f64 y (cbrt.f64 -1)) (neg.f64 x)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 (neg.f64 x) y)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 y (neg.f64 x))))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(neg.f64 (*.f64 (*.f64 (*.f64 y y) (cbrt.f64 -1)) x))
(*.f64 (*.f64 y y) (neg.f64 (*.f64 x (cbrt.f64 -1))))
(*.f64 y (*.f64 (*.f64 y (cbrt.f64 -1)) (neg.f64 x)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 (neg.f64 x) y)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 y (neg.f64 x))))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(neg.f64 (*.f64 (*.f64 (*.f64 y y) (cbrt.f64 -1)) x))
(*.f64 (*.f64 y y) (neg.f64 (*.f64 x (cbrt.f64 -1))))
(*.f64 y (*.f64 (*.f64 y (cbrt.f64 -1)) (neg.f64 x)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 (neg.f64 x) y)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 y (neg.f64 x))))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 (*.f64 y y) x)
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(neg.f64 (*.f64 (*.f64 (*.f64 y y) (cbrt.f64 -1)) x))
(*.f64 (*.f64 y y) (neg.f64 (*.f64 x (cbrt.f64 -1))))
(*.f64 y (*.f64 (*.f64 y (cbrt.f64 -1)) (neg.f64 x)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 (neg.f64 x) y)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 y (neg.f64 x))))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(neg.f64 (*.f64 (*.f64 (*.f64 y y) (cbrt.f64 -1)) x))
(*.f64 (*.f64 y y) (neg.f64 (*.f64 x (cbrt.f64 -1))))
(*.f64 y (*.f64 (*.f64 y (cbrt.f64 -1)) (neg.f64 x)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 (neg.f64 x) y)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 y (neg.f64 x))))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(neg.f64 (*.f64 (*.f64 (*.f64 y y) (cbrt.f64 -1)) x))
(*.f64 (*.f64 y y) (neg.f64 (*.f64 x (cbrt.f64 -1))))
(*.f64 y (*.f64 (*.f64 y (cbrt.f64 -1)) (neg.f64 x)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 (neg.f64 x) y)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 y (neg.f64 x))))
(*.f64 -1 (*.f64 (pow.f64 y 2) (*.f64 (cbrt.f64 -1) x)))
(neg.f64 (*.f64 (*.f64 (*.f64 y y) (cbrt.f64 -1)) x))
(*.f64 (*.f64 y y) (neg.f64 (*.f64 x (cbrt.f64 -1))))
(*.f64 y (*.f64 (*.f64 y (cbrt.f64 -1)) (neg.f64 x)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 (neg.f64 x) y)))
(*.f64 y (*.f64 (cbrt.f64 -1) (*.f64 y (neg.f64 x))))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))
(*.f64 (pow.f64 y 2) (pow.f64 x 2))
(*.f64 (*.f64 y y) (*.f64 x x))
(*.f64 y (*.f64 y (*.f64 x x)))

localize14.0ms (0.3%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.1b
(*.f64 (pow.f64 (*.f64 (sqrt.f64 x) y) 3/2) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
0.1b
(*.f64 (sqrt.f64 x) y)
1.6b
(pow.f64 (*.f64 (sqrt.f64 x) y) 3/2)
3.1b
(sqrt.f64 (*.f64 (sqrt.f64 x) y))
Compiler

Compiled 34 to 11 computations (67.6% saved)

series131.0ms (3%)

Counts
2 → 36
Calls

12 calls:

TimeVariablePointExpression
40.0ms
y
@-inf
(pow.f64 (*.f64 (sqrt.f64 x) y) 3/2)
23.0ms
x
@0
(*.f64 (pow.f64 (*.f64 (sqrt.f64 x) y) 3/2) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
21.0ms
y
@0
(*.f64 (pow.f64 (*.f64 (sqrt.f64 x) y) 3/2) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
16.0ms
y
@0
(pow.f64 (*.f64 (sqrt.f64 x) y) 3/2)
15.0ms
y
@-inf
(*.f64 (pow.f64 (*.f64 (sqrt.f64 x) y) 3/2) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))

rewrite62.0ms (1.4%)

Algorithm
batch-egg-rewrite
Rules
770×pow1_binary64
717×add-log-exp_binary64
717×log1p-expm1-u_binary64
717×expm1-log1p-u_binary64
697×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify64.0ms (1.5%)

Algorithm
egg-herbie
Rules
425×fma-neg_binary64
363×exp-sum_binary64
357×distribute-rgt-neg-in_binary64
340×div-sub_binary64
326×associate-*l*_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
033380
189360
2244320
3645284
42314284
56282284
Stop Event
node limit
Counts
71 → 44
Calls
Call 1
Inputs
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x)))))
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x)))))
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x)))))
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x)))))
(exp.f64 (*.f64 3/2 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 y))) (log.f64 (sqrt.f64 x)))))
(exp.f64 (*.f64 3/2 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 y))) (log.f64 (sqrt.f64 x)))))
(exp.f64 (*.f64 3/2 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 y))) (log.f64 (sqrt.f64 x)))))
(exp.f64 (*.f64 3/2 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 y))) (log.f64 (sqrt.f64 x)))))
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 (*.f64 -1 (sqrt.f64 x))) (*.f64 -1 (log.f64 (/.f64 -1 y))))))
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 (*.f64 -1 (sqrt.f64 x))) (*.f64 -1 (log.f64 (/.f64 -1 y))))))
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 (*.f64 -1 (sqrt.f64 x))) (*.f64 -1 (log.f64 (/.f64 -1 y))))))
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 (*.f64 -1 (sqrt.f64 x))) (*.f64 -1 (log.f64 (/.f64 -1 y))))))
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 y 2) x)
(*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x))
(*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x))
(*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x))
(*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x))
Outputs
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x)))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x)))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x)))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x)))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 y))) (log.f64 (sqrt.f64 x)))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 y))) (log.f64 (sqrt.f64 x)))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 y))) (log.f64 (sqrt.f64 x)))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (*.f64 -1 (log.f64 (/.f64 1 y))) (log.f64 (sqrt.f64 x)))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 (*.f64 -1 (sqrt.f64 x))) (*.f64 -1 (log.f64 (/.f64 -1 y))))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 (*.f64 -1 (sqrt.f64 x))) (*.f64 -1 (log.f64 (/.f64 -1 y))))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 (*.f64 -1 (sqrt.f64 x))) (*.f64 -1 (log.f64 (/.f64 -1 y))))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(exp.f64 (*.f64 3/2 (+.f64 (log.f64 (*.f64 -1 (sqrt.f64 x))) (*.f64 -1 (log.f64 (/.f64 -1 y))))))
(pow.f64 (exp.f64 3/2) (+.f64 (log.f64 y) (log.f64 (sqrt.f64 x))))
(*.f64 (pow.f64 y 3/2) (pow.f64 (sqrt.f64 x) 3/2))
(pow.f64 (*.f64 y (sqrt.f64 x)) 3/2)
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 -1 (*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x)))
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 y 2) x)
(*.f64 x (*.f64 y y))
(*.f64 y (*.f64 y x))
(*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x))
(*.f64 (*.f64 x (*.f64 y y)) (pow.f64 (sqrt.f64 -1) 2))
(*.f64 (*.f64 y y) (*.f64 x -1))
(*.f64 (*.f64 y y) (neg.f64 x))
(*.f64 y (*.f64 y (neg.f64 x)))
(*.f64 x (neg.f64 (*.f64 y y)))
(*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x))
(*.f64 (*.f64 x (*.f64 y y)) (pow.f64 (sqrt.f64 -1) 2))
(*.f64 (*.f64 y y) (*.f64 x -1))
(*.f64 (*.f64 y y) (neg.f64 x))
(*.f64 y (*.f64 y (neg.f64 x)))
(*.f64 x (neg.f64 (*.f64 y y)))
(*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x))
(*.f64 (*.f64 x (*.f64 y y)) (pow.f64 (sqrt.f64 -1) 2))
(*.f64 (*.f64 y y) (*.f64 x -1))
(*.f64 (*.f64 y y) (neg.f64 x))
(*.f64 y (*.f64 y (neg.f64 x)))
(*.f64 x (neg.f64 (*.f64 y y)))
(*.f64 (pow.f64 (sqrt.f64 -1) 2) (*.f64 (pow.f64 y 2) x))
(*.f64 (*.f64 x (*.f64 y y)) (pow.f64 (sqrt.f64 -1) 2))
(*.f64 (*.f64 y y) (*.f64 x -1))
(*.f64 (*.f64 y y) (neg.f64 x))
(*.f64 y (*.f64 y (neg.f64 x)))
(*.f64 x (neg.f64 (*.f64 y y)))

localize26.0ms (0.6%)

Local error

Found 4 expressions with local error:

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

Compiled 51 to 27 computations (47.1% saved)

series45.0ms (1%)

Counts
2 → 0
Calls

12 calls:

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

rewrite57.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
955×pow1_binary64
889×add-log-exp_binary64
888×log1p-expm1-u_binary64
888×expm1-log1p-u_binary64
114×add-sqr-sqrt_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify7.0ms (0.2%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

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

eval100.0ms (2.3%)

Compiler

Compiled 6618 to 2422 computations (63.4% saved)

prune78.0ms (1.8%)

Pruning

12 alts after pruning (6 fresh and 6 done)

PrunedKeptTotal
New4246430
Fresh000
Picked101
Done4610
Total42912441
Error
0b
Counts
441 → 12
Alt Table
Click to see full alt table
StatusErrorProgram
23.9b
(*.f64 (cbrt.f64 (pow.f64 (*.f64 x y) 3/2)) (*.f64 (sqrt.f64 (*.f64 x y)) y))
9.2b
(*.f64 x (*.f64 y y))
0.2b
(*.f64 (*.f64 x y) y)
30.5b
(pow.f64 (*.f64 (sqrt.f64 x) y) 2)
30.2b
(*.f64 (*.f64 (*.f64 x y) (sqrt.f64 y)) (sqrt.f64 y))
11.7b
(*.f64 (cbrt.f64 (*.f64 (*.f64 x y) (*.f64 x y))) (*.f64 (cbrt.f64 (*.f64 x y)) y))
45.9b
(*.f64 (*.f64 (pow.f64 y 3/2) (pow.f64 x 3/4)) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
21.8b
(*.f64 (pow.f64 (pow.f64 (*.f64 x y) 1/4) 2) (*.f64 (sqrt.f64 (*.f64 x y)) y))
12.0b
(*.f64 (cbrt.f64 (pow.f64 (*.f64 x y) 2)) (*.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 x y))) 3) y))
16.6b
(*.f64 (cbrt.f64 (*.f64 (*.f64 (*.f64 x y) x) y)) (*.f64 (cbrt.f64 (*.f64 x y)) y))
9.8b
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 3)
21.7b
(*.f64 (sqrt.f64 (*.f64 x y)) (*.f64 (sqrt.f64 (*.f64 x y)) y))
Compiler

Compiled 154 to 92 computations (40.3% saved)

regimes93.0ms (2.1%)

Accuracy

Total -51.4b remaining (-29247.3%)

Threshold costs -51.4b (-29247.3%)

Counts
20 → 1
Calls
Call 1
Inputs
(*.f64 x (*.f64 y y))
(*.f64 (*.f64 x y) y)
(pow.f64 (*.f64 (sqrt.f64 x) y) 2)
(pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 3)
(*.f64 (*.f64 (*.f64 x y) (sqrt.f64 y)) (sqrt.f64 y))
(*.f64 (sqrt.f64 (*.f64 x y)) (*.f64 (sqrt.f64 (*.f64 x y)) y))
(*.f64 (cbrt.f64 (*.f64 (*.f64 x y) (*.f64 x y))) (*.f64 (cbrt.f64 (*.f64 x y)) y))
(*.f64 (cbrt.f64 (*.f64 (*.f64 (*.f64 x y) x) y)) (*.f64 (cbrt.f64 (*.f64 x y)) y))
(pow.f64 (*.f64 (cbrt.f64 (*.f64 x y)) (cbrt.f64 y)) 3)
(*.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) (*.f64 y y)))
(*.f64 (cbrt.f64 (pow.f64 (*.f64 x y) 3/2)) (*.f64 (sqrt.f64 (*.f64 x y)) y))
(*.f64 (cbrt.f64 (pow.f64 (*.f64 x y) 2)) (*.f64 (cbrt.f64 (*.f64 x y)) y))
(*.f64 (pow.f64 (pow.f64 (*.f64 x y) 1/4) 2) (*.f64 (sqrt.f64 (*.f64 x y)) y))
(*.f64 (pow.f64 (*.f64 (sqrt.f64 x) y) 3/2) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
(*.f64 (*.f64 (pow.f64 y 3/2) (pow.f64 x 3/4)) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
(*.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 2) (cbrt.f64 y)) (cbrt.f64 (*.f64 x y)))
(*.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (*.f64 y y))) 2) (cbrt.f64 x)) (cbrt.f64 (*.f64 y y)))
(pow.f64 (*.f64 (sqrt.f64 (cbrt.f64 (pow.f64 (*.f64 x y) 2))) (cbrt.f64 y)) 3)
(*.f64 (cbrt.f64 (pow.f64 (*.f64 x y) 2)) (*.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (*.f64 x y))) 3) y))
(*.f64 (*.f64 (*.f64 (sqrt.f64 x) y) (sqrt.f64 (*.f64 (sqrt.f64 x) y))) (sqrt.f64 (*.f64 (sqrt.f64 x) y)))
Outputs
(*.f64 (*.f64 x y) y)
Calls

3 calls:

68.0ms
x
11.0ms
y
8.0ms
(*.f64 (*.f64 x y) y)
Results
ErrorSegmentsBranch
0.2b1x
0.2b1y
0.2b1(*.f64 (*.f64 x y) y)
Compiler

Compiled 250 to 94 computations (62.4% saved)

simplify3.0ms (0.1%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0714
11014
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(*.f64 (*.f64 x y) y)
(*.f64 x (*.f64 y y))
Outputs
(*.f64 (*.f64 x y) y)
(*.f64 y (*.f64 x y))
(*.f64 x (*.f64 y y))
Compiler

Compiled 14 to 8 computations (42.9% saved)

soundness0.0ms (0%)

end16.0ms (0.4%)

Compiler

Compiled 12 to 6 computations (50% saved)

Profiling

Loading profile data...