Details

Time bar (total: 2.9s)

analyze0.0ms (0%)

Algorithm
search
Search
TrueOtherFalseIter
0%25%75%0
25%0%75%1
Compiler

Compiled 17 to 9 computations (47.1% saved)

sample1.4s (47.5%)

Results
1.4s8256×body256valid

preprocess176.0ms (6%)

Algorithm
egg-herbie
Rules
1274×sqr-pow_binary64
666×pow-sqr_binary64
635×cube-prod_binary64
563×fabs-mul_binary64
362×unswap-sqr_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0510
1158
2318
3468
4718
51238
62468
77098
814058
915068
1016398
1117978
1220368
1323608
1427848
1532878
1638878
1746118
1849308
1952168
2054408
2156188
2257008
2366408
2476148
011
Stop Event
saturated
node limit
Calls
Call 1
Inputs
0
Outputs
0
Call 2
Inputs
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
Outputs
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(fma.f64 x x (pow.f64 x 3))
Compiler

Compiled 11 to 5 computations (54.5% saved)

simplify162.0ms (5.5%)

Algorithm
egg-herbie
Rules
1274×sqr-pow_binary64
666×pow-sqr_binary64
635×cube-prod_binary64
563×fabs-mul_binary64
362×unswap-sqr_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0510
1158
2318
3468
4718
51238
62468
77098
814058
915068
1016398
1117978
1220368
1323608
1427848
1532878
1638878
1746118
1849308
1952168
2054408
2156188
2257008
2366408
2476148
Stop Event
node limit
Counts
1 → 2
Calls
Call 1
Inputs
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
Outputs
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(fma.f64 x x (pow.f64 x 3))

eval1.0ms (0%)

Compiler

Compiled 16 to 7 computations (56.3% saved)

prune1.0ms (0%)

Pruning

3 alts after pruning (3 fresh and 0 done)

PrunedKeptTotal
New022
Fresh011
Picked000
Done000
Total033
Error
0b
Counts
3 → 2
Alt Table
Click to see full alt table
StatusErrorProgram
0b
(fma.f64 x x (pow.f64 x 3))
0.0b
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
Compiler

Compiled 17 to 8 computations (52.9% saved)

localize5.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
0.1b
(*.f64 x (*.f64 x x))
Compiler

Compiled 19 to 4 computations (78.9% saved)

series3.0ms (0.1%)

Counts
2 → 24
Calls

6 calls:

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

rewrite136.0ms (4.6%)

Algorithm
batch-egg-rewrite
Rules
587×pow1_binary64
553×add-log-exp_binary64
552×log1p-expm1-u_binary64
552×expm1-log1p-u_binary64
539×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0514
111612
2160912
Stop Event
node limit
Counts
2 → 53
Calls
Call 1
Inputs
(*.f64 x (*.f64 x x))
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (pow.f64 x 3)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 x 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 x 3) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 x 3/2) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 x 9) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 x 6))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 x 9))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 x) 3))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 x (fma.f64 x x x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 x 6) (-.f64 (pow.f64 x 3) (*.f64 x x))) (/.f64 (pow.f64 x 4) (-.f64 (pow.f64 x 3) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 x (fma.f64 x x x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x x) (+.f64 x 1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (fma.f64 x x x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 x (fma.f64 x x x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) (fma.f64 x x x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 x (fma.f64 x x x))) (pow.f64 (cbrt.f64 (*.f64 x (fma.f64 x x x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 x (fma.f64 x x x))) 2) (cbrt.f64 (*.f64 x (fma.f64 x x x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (hypot.f64 x (pow.f64 x 3/2)) (hypot.f64 x (pow.f64 x 3/2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (fma.f64 x x x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 x 9) (pow.f64 x 6)) (/.f64 1 (+.f64 (pow.f64 x 6) (-.f64 (pow.f64 x 4) (pow.f64 x 5)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 x 6) (pow.f64 x 4)) (/.f64 1 (-.f64 (pow.f64 x 3) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 x 1) (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 x x x) x)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x 1) 1) (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x 1) (cbrt.f64 (pow.f64 x 4))) (pow.f64 (cbrt.f64 x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 x 6) (-.f64 (pow.f64 x 4) (pow.f64 x 5))) (+.f64 (pow.f64 x 9) (pow.f64 x 6))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (pow.f64 x 3) (*.f64 x x)) (-.f64 (pow.f64 x 6) (pow.f64 x 4))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 x 9) (pow.f64 x 6)) (+.f64 (pow.f64 x 6) (-.f64 (pow.f64 x 4) (pow.f64 x 5))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 x 9) (pow.f64 x 6)) (+.f64 (pow.f64 x 4) (-.f64 (pow.f64 x 6) (pow.f64 x 5))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 x 6) (pow.f64 x 4)) (-.f64 (pow.f64 x 3) (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 x 9) (pow.f64 x 6))) (neg.f64 (+.f64 (pow.f64 x 6) (-.f64 (pow.f64 x 4) (pow.f64 x 5)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 x 6) (pow.f64 x 4))) (neg.f64 (-.f64 (pow.f64 x 3) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 x 4) (pow.f64 x 6)) (-.f64 (*.f64 x x) (pow.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (fma.f64 x x x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (fma.f64 x x x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (fma.f64 x x x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (hypot.f64 x (pow.f64 x 3/2)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 x (fma.f64 x x x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 x) (fma.f64 x x x)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (fma.f64 x x x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (fma.f64 x x x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (fma.f64 x x x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (fma.f64 x x x))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x x (pow.f64 x 3))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x (*.f64 x x) (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 x x) x (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 x x) (pow.f64 x 3))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (pow.f64 x 3) (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 x 4)) (pow.f64 (cbrt.f64 x) 2) (pow.f64 x 3))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 x 3/2) (pow.f64 x 3/2) (*.f64 x x))))))

simplify164.0ms (5.6%)

Algorithm
egg-herbie
Rules
1262×fma-def_binary64
944×sqr-pow_binary64
536×unswap-sqr_binary64
503×cube-prod_binary64
463×fabs-mul_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
07150
120132
244132
381132
4220132
5925132
62623132
73374132
83667132
93991132
104401132
114974132
125633132
136362132
146942132
157270132
167544132
177715132
187808132
Stop Event
node limit
Counts
77 → 56
Calls
Call 1
Inputs
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 2)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
Outputs
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 3)
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 3) (*.f64 x x))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 3) (*.f64 x x))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 3) (*.f64 x x))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 3) (*.f64 x x))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 3) (*.f64 x x))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 3) (*.f64 x x))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 3) (*.f64 x x))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 3) (*.f64 x x))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 3) (*.f64 x x))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))

localize6.0ms (0.2%)

Compiler

Compiled 12 to 7 computations (41.7% saved)

eval14.0ms (0.5%)

Compiler

Compiled 601 to 309 computations (48.6% saved)

prune7.0ms (0.3%)

Pruning

4 alts after pruning (2 fresh and 2 done)

PrunedKeptTotal
New54256
Fresh000
Picked011
Done011
Total54458
Error
0b
Counts
58 → 4
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(*.f64 (+.f64 x 1) (*.f64 x x))
0.0b
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
1.3b
(*.f64 x x)
0b
(fma.f64 x x (pow.f64 x 3))
Compiler

Compiled 29 to 15 computations (48.3% saved)

localize2.0ms (0.1%)

Compiler

Compiled 5 to 2 computations (60% saved)

localize15.0ms (0.5%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (+.f64 x 1) (*.f64 x x))
Compiler

Compiled 16 to 8 computations (50% saved)

series1.0ms (0.1%)

Counts
1 → 12
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@0
(*.f64 (+.f64 x 1) (*.f64 x x))
0.0ms
x
@inf
(*.f64 (+.f64 x 1) (*.f64 x x))
0.0ms
x
@-inf
(*.f64 (+.f64 x 1) (*.f64 x x))

rewrite64.0ms (2.2%)

Algorithm
batch-egg-rewrite
Rules
589×pow1_binary64
550×log1p-expm1-u_binary64
550×expm1-log1p-u_binary64
549×add-log-exp_binary64
536×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify165.0ms (5.6%)

Algorithm
egg-herbie
Rules
1262×fma-def_binary64
944×sqr-pow_binary64
536×unswap-sqr_binary64
503×cube-prod_binary64
464×fabs-mul_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
07102
12084
24484
38184
421984
591384
6261384
7336484
8365884
9398284
10439284
11496584
12562284
13635184
14692784
15725584
16752984
17770484
18779984
Stop Event
node limit
Counts
29 → 22
Calls
Call 1
Inputs
(pow.f64 x 2)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
Outputs
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))

eval4.0ms (0.2%)

Compiler

Compiled 197 to 116 computations (41.1% saved)

prune4.0ms (0.1%)

Pruning

4 alts after pruning (1 fresh and 3 done)

PrunedKeptTotal
New21122
Fresh000
Picked011
Done123
Total22426
Error
0b
Counts
26 → 4
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(*.f64 (+.f64 x 1) (*.f64 x x))
0.0b
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
1.3b
(*.f64 x x)
0.0b
(/.f64 (*.f64 (fma.f64 x x -1) (*.f64 x x)) (+.f64 x -1))
Compiler

Compiled 35 to 19 computations (45.7% saved)

localize16.0ms (0.6%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (fma.f64 x x -1) (*.f64 x x))
0.0b
(/.f64 (*.f64 (fma.f64 x x -1) (*.f64 x x)) (+.f64 x -1))
Compiler

Compiled 33 to 16 computations (51.5% saved)

series4.0ms (0.1%)

Counts
2 → 24
Calls

6 calls:

TimeVariablePointExpression
1.0ms
x
@0
(/.f64 (*.f64 (fma.f64 x x -1) (*.f64 x x)) (+.f64 x -1))
1.0ms
x
@-inf
(*.f64 (fma.f64 x x -1) (*.f64 x x))
1.0ms
x
@-inf
(/.f64 (*.f64 (fma.f64 x x -1) (*.f64 x x)) (+.f64 x -1))
1.0ms
x
@inf
(/.f64 (*.f64 (fma.f64 x x -1) (*.f64 x x)) (+.f64 x -1))
0.0ms
x
@inf
(*.f64 (fma.f64 x x -1) (*.f64 x x))

rewrite64.0ms (2.2%)

Algorithm
batch-egg-rewrite
Rules
992×pow1_binary64
926×add-log-exp_binary64
926×log1p-expm1-u_binary64
926×expm1-log1p-u_binary64
90×add-sqr-sqrt_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0828
117521
2251121
Stop Event
node limit
Counts
2 → 64
Calls
Call 1
Inputs
(/.f64 (*.f64 (fma.f64 x x -1) (*.f64 x x)) (+.f64 x -1))
(*.f64 (fma.f64 x x -1) (*.f64 x x))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 (+.f64 x 1) (*.f64 x x)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 x x -1) (/.f64 1 (/.f64 (/.f64 (+.f64 x -1) x) x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 x x -1) (*.f64 (*.f64 x x) (/.f64 1 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x x) (*.f64 (fma.f64 x x -1) (/.f64 1 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))) (/.f64 1 (+.f64 x -1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x 1) (*.f64 x x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 (+.f64 x 1) (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 (+.f64 x 1) (*.f64 x x))) (pow.f64 (cbrt.f64 (*.f64 (+.f64 x 1) (*.f64 x x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 (+.f64 x 1) (*.f64 x x))) 2) (cbrt.f64 (*.f64 (+.f64 x 1) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (*.f64 (pow.f64 x 4) (pow.f64 (fma.f64 x x -1) 2))) (*.f64 (cbrt.f64 (*.f64 x (*.f64 x (fma.f64 x x -1)))) (/.f64 1 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 (+.f64 x 1) (*.f64 x x))) (sqrt.f64 (*.f64 (+.f64 x 1) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (sqrt.f64 (fma.f64 x x -1))) (*.f64 (*.f64 x (sqrt.f64 (fma.f64 x x -1))) (/.f64 1 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (fma.f64 x x -1) (neg.f64 (*.f64 x x))) (/.f64 1 (neg.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (+.f64 x -1)) (*.f64 x (*.f64 x (fma.f64 x x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 x 1) (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (fma.f64 x x -1)) (*.f64 x (/.f64 1 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (fma.f64 x x -1) 1) (/.f64 (*.f64 x x) (+.f64 x -1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 x x) 1) (+.f64 x 1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (cbrt.f64 (*.f64 (pow.f64 x 4) (pow.f64 (fma.f64 x x -1) 2))) 1) (/.f64 (cbrt.f64 (*.f64 x (*.f64 x (fma.f64 x x -1)))) (+.f64 x -1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 x (sqrt.f64 (fma.f64 x x -1))) 1) (/.f64 (*.f64 x (sqrt.f64 (fma.f64 x x -1))) (+.f64 x -1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 x (fma.f64 x x -1)) 1) (/.f64 x (+.f64 x -1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (fma.f64 x x -1) (pow.f64 (cbrt.f64 (+.f64 x -1)) 2)) (/.f64 (*.f64 x x) (cbrt.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 x x) (pow.f64 (cbrt.f64 (+.f64 x -1)) 2)) (/.f64 (fma.f64 x x -1) (cbrt.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (pow.f64 (cbrt.f64 (+.f64 x -1)) 2)) (/.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))) (cbrt.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (cbrt.f64 (*.f64 (pow.f64 x 4) (pow.f64 (fma.f64 x x -1) 2))) (pow.f64 (cbrt.f64 (+.f64 x -1)) 2)) (cbrt.f64 (*.f64 (+.f64 x 1) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 x (sqrt.f64 (fma.f64 x x -1))) (pow.f64 (cbrt.f64 (+.f64 x -1)) 2)) (/.f64 (*.f64 x (sqrt.f64 (fma.f64 x x -1))) (cbrt.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 x (fma.f64 x x -1)) (pow.f64 (cbrt.f64 (+.f64 x -1)) 2)) (/.f64 x (cbrt.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (fma.f64 x x -1) (sqrt.f64 (+.f64 x -1))) (/.f64 (*.f64 x x) (sqrt.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 x x) (sqrt.f64 (+.f64 x -1))) (/.f64 (fma.f64 x x -1) (sqrt.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 1 (sqrt.f64 (+.f64 x -1))) (/.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))) (sqrt.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (cbrt.f64 (*.f64 (pow.f64 x 4) (pow.f64 (fma.f64 x x -1) 2))) (sqrt.f64 (+.f64 x -1))) (/.f64 (cbrt.f64 (*.f64 x (*.f64 x (fma.f64 x x -1)))) (sqrt.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 x (fma.f64 x x -1)) (sqrt.f64 (+.f64 x -1))) (/.f64 x (sqrt.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))) (+.f64 -1 (pow.f64 x 3))) (fma.f64 x x (-.f64 1 (*.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))) (fma.f64 x x -1)) (+.f64 x 1))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (+.f64 x 1) (*.f64 x x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (+.f64 x 1) (*.f64 x x)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (+.f64 x 1) (*.f64 x x))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (+.f64 x 1) (*.f64 x x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 1 (*.f64 (+.f64 x 1) (*.f64 x x))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (/.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))) (neg.f64 (+.f64 x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (+.f64 x 1) (*.f64 x x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 (+.f64 x 1) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 (+.f64 x 1) (*.f64 x x)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (+.f64 x 1) (*.f64 x x)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (/.f64 (pow.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))) 3) (pow.f64 (+.f64 x -1) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (+.f64 x 1) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (+.f64 x 1) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (+.f64 x 1) (*.f64 x x))))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (pow.f64 x 4) (*.f64 (*.f64 x x) -1))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (pow.f64 x 4) (*.f64 -1 (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (*.f64 x (fma.f64 x x -1)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (sqrt.f64 (fma.f64 x x -1))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (pow.f64 x 4) (pow.f64 (fma.f64 x x -1) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (fma.f64 x x -1)) (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 x (*.f64 x (fma.f64 x x -1))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (fma.f64 x x -1) 3) (pow.f64 (*.f64 x x) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (pow.f64 (*.f64 x x) 3) (pow.f64 (fma.f64 x x -1) 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (*.f64 x (fma.f64 x x -1)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (*.f64 x (fma.f64 x x -1)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (*.f64 x (fma.f64 x x -1)))))))))

simplify58.0ms (2%)

Algorithm
egg-herbie
Rules
786×fma-neg_binary64
699×cancel-sign-sub-inv_binary64
535×associate-*l*_binary64
513×distribute-rgt-neg-in_binary64
478×distribute-lft-neg-in_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
012215
131188
273188
3169188
4621188
53357188
Stop Event
node limit
Counts
88 → 74
Calls
Call 1
Inputs
(pow.f64 x 2)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(*.f64 -1 (pow.f64 x 2))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(pow.f64 x 4)
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(pow.f64 x 4)
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
Outputs
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(pow.f64 x 3)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(*.f64 -1 (pow.f64 x 2))
(neg.f64 (*.f64 x x))
(*.f64 x (neg.f64 x))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(fma.f64 -1 (*.f64 x x) (pow.f64 x 4))
(-.f64 (pow.f64 x 4) (*.f64 x x))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(fma.f64 -1 (*.f64 x x) (pow.f64 x 4))
(-.f64 (pow.f64 x 4) (*.f64 x x))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(fma.f64 -1 (*.f64 x x) (pow.f64 x 4))
(-.f64 (pow.f64 x 4) (*.f64 x x))
(pow.f64 x 4)
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(fma.f64 -1 (*.f64 x x) (pow.f64 x 4))
(-.f64 (pow.f64 x 4) (*.f64 x x))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(fma.f64 -1 (*.f64 x x) (pow.f64 x 4))
(-.f64 (pow.f64 x 4) (*.f64 x x))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(fma.f64 -1 (*.f64 x x) (pow.f64 x 4))
(-.f64 (pow.f64 x 4) (*.f64 x x))
(pow.f64 x 4)
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(fma.f64 -1 (*.f64 x x) (pow.f64 x 4))
(-.f64 (pow.f64 x 4) (*.f64 x x))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(fma.f64 -1 (*.f64 x x) (pow.f64 x 4))
(-.f64 (pow.f64 x 4) (*.f64 x x))
(+.f64 (*.f64 -1 (pow.f64 x 2)) (pow.f64 x 4))
(fma.f64 -1 (*.f64 x x) (pow.f64 x 4))
(-.f64 (pow.f64 x 4) (*.f64 x x))

eval22.0ms (0.7%)

Compiler

Compiled 1061 to 682 computations (35.7% saved)

prune12.0ms (0.4%)

Pruning

4 alts after pruning (1 fresh and 3 done)

PrunedKeptTotal
New73174
Fresh000
Picked101
Done033
Total74478
Error
0b
Counts
78 → 4
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(*.f64 (+.f64 x 1) (*.f64 x x))
0.0b
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
0.4b
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
1.3b
(*.f64 x x)
Compiler

Compiled 31 to 17 computations (45.2% saved)

localize8.0ms (0.3%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
Compiler

Compiled 20 to 9 computations (55% saved)

series2.0ms (0.1%)

Counts
1 → 12
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@0
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
1.0ms
x
@inf
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
0.0ms
x
@-inf
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))

rewrite53.0ms (1.8%)

Algorithm
batch-egg-rewrite
Rules
706×pow1_binary64
661×add-log-exp_binary64
658×log1p-expm1-u_binary64
658×expm1-log1p-u_binary64
648×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify55.0ms (1.9%)

Algorithm
egg-herbie
Rules
861×fma-def_binary64
576×associate-*l*_binary64
518×fma-neg_binary64
477×associate-*r*_binary64
468×times-frac_binary64
Iterations

Useful iterations: 4 (0.0ms)

IterNodesCost
024130
168124
2171114
3485114
41672112
55302112
Stop Event
node limit
Counts
47 → 51
Calls
Call 1
Inputs
(pow.f64 x 2)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (pow.f64 x 4) (+.f64 (pow.f64 x 2) (pow.f64 x 3)))
(+.f64 (pow.f64 x 5) (+.f64 (pow.f64 x 4) (+.f64 (pow.f64 x 2) (pow.f64 x 3))))
(*.f64 -1 x)
(-.f64 (*.f64 -1 x) 1)
(-.f64 (*.f64 -1 x) (+.f64 1 (/.f64 1 x)))
(-.f64 (*.f64 -1 x) (+.f64 1 (+.f64 (/.f64 1 (pow.f64 x 2)) (/.f64 1 x))))
(*.f64 -1 x)
(-.f64 (*.f64 -1 x) 1)
(-.f64 (*.f64 -1 x) (+.f64 1 (/.f64 1 x)))
(-.f64 (*.f64 -1 x) (+.f64 1 (+.f64 (/.f64 1 (pow.f64 x 2)) (/.f64 1 x))))
Outputs
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (pow.f64 x 2) (pow.f64 x 3))
(+.f64 (*.f64 x x) (pow.f64 x 3))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
(+.f64 (pow.f64 x 4) (+.f64 (pow.f64 x 2) (pow.f64 x 3)))
(+.f64 (+.f64 (pow.f64 x 4) (*.f64 x x)) (pow.f64 x 3))
(+.f64 (fma.f64 x x (pow.f64 x 3)) (pow.f64 x 4))
(fma.f64 x (fma.f64 x x x) (pow.f64 x 4))
(*.f64 x (fma.f64 x (fma.f64 x x x) x))
(+.f64 (pow.f64 x 5) (+.f64 (pow.f64 x 4) (+.f64 (pow.f64 x 2) (pow.f64 x 3))))
(+.f64 (+.f64 (+.f64 (pow.f64 x 4) (*.f64 x x)) (pow.f64 x 3)) (pow.f64 x 5))
(+.f64 (fma.f64 x x (pow.f64 x 3)) (+.f64 (pow.f64 x 4) (pow.f64 x 5)))
(+.f64 (pow.f64 x 4) (fma.f64 x (fma.f64 x x x) (pow.f64 x 5)))
(fma.f64 x (fma.f64 x (fma.f64 x x x) x) (pow.f64 x 5))
(*.f64 -1 x)
(neg.f64 x)
(-.f64 (*.f64 -1 x) 1)
(fma.f64 -1 x -1)
(fma.f64 x -1 -1)
(-.f64 -1 x)
(-.f64 (*.f64 -1 x) (+.f64 1 (/.f64 1 x)))
(-.f64 (fma.f64 -1 x -1) (/.f64 1 x))
(-.f64 (fma.f64 x -1 -1) (/.f64 1 x))
(-.f64 (+.f64 -1 (/.f64 -1 x)) x)
(-.f64 (-.f64 -1 (/.f64 1 x)) x)
(-.f64 (/.f64 -1 x) (+.f64 x 1))
(-.f64 (*.f64 -1 x) (+.f64 1 (+.f64 (/.f64 1 (pow.f64 x 2)) (/.f64 1 x))))
(-.f64 (fma.f64 -1 x -1) (+.f64 (/.f64 1 x) (/.f64 1 (*.f64 x x))))
(-.f64 (fma.f64 x -1 -1) (+.f64 (/.f64 1 x) (/.f64 1 (*.f64 x x))))
(-.f64 (-.f64 -1 x) (+.f64 (/.f64 1 x) (/.f64 1 (*.f64 x x))))
(+.f64 -1 (+.f64 (-.f64 (/.f64 -1 x) x) (/.f64 -1 (*.f64 x x))))
(*.f64 -1 x)
(neg.f64 x)
(-.f64 (*.f64 -1 x) 1)
(fma.f64 -1 x -1)
(fma.f64 x -1 -1)
(-.f64 -1 x)
(-.f64 (*.f64 -1 x) (+.f64 1 (/.f64 1 x)))
(-.f64 (fma.f64 -1 x -1) (/.f64 1 x))
(-.f64 (fma.f64 x -1 -1) (/.f64 1 x))
(-.f64 (+.f64 -1 (/.f64 -1 x)) x)
(-.f64 (-.f64 -1 (/.f64 1 x)) x)
(-.f64 (/.f64 -1 x) (+.f64 x 1))
(-.f64 (*.f64 -1 x) (+.f64 1 (+.f64 (/.f64 1 (pow.f64 x 2)) (/.f64 1 x))))
(-.f64 (fma.f64 -1 x -1) (+.f64 (/.f64 1 x) (/.f64 1 (*.f64 x x))))
(-.f64 (fma.f64 x -1 -1) (+.f64 (/.f64 1 x) (/.f64 1 (*.f64 x x))))
(-.f64 (-.f64 -1 x) (+.f64 (/.f64 1 x) (/.f64 1 (*.f64 x x))))
(+.f64 -1 (+.f64 (-.f64 (/.f64 -1 x) x) (/.f64 -1 (*.f64 x x))))

eval11.0ms (0.4%)

Compiler

Compiled 539 to 336 computations (37.7% saved)

prune10.0ms (0.3%)

Pruning

5 alts after pruning (1 fresh and 4 done)

PrunedKeptTotal
New50151
Fresh000
Picked011
Done033
Total50555
Error
0b
Counts
55 → 5
Alt Table
Click to see full alt table
StatusErrorProgram
61.1b
(neg.f64 x)
0.0b
(*.f64 (+.f64 x 1) (*.f64 x x))
0.0b
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
0.4b
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
1.3b
(*.f64 x x)
Compiler

Compiled 34 to 19 computations (44.1% saved)

regimes8.0ms (0.3%)

Counts
7 → 1
Calls
Call 1
Inputs
(neg.f64 x)
(*.f64 x x)
(*.f64 (+.f64 x 1) (*.f64 x x))
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
(/.f64 (*.f64 (fma.f64 x x -1) (*.f64 x x)) (+.f64 x -1))
(fma.f64 x x (pow.f64 x 3))
Outputs
(fma.f64 x x (pow.f64 x 3))
Calls

2 calls:

4.0ms
x
3.0ms
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
Results
ErrorSegmentsBranch
0b1x
0b1(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
Compiler

Compiled 60 to 26 computations (56.7% saved)

regimes11.0ms (0.4%)

Counts
6 → 1
Calls
Call 1
Inputs
(neg.f64 x)
(*.f64 x x)
(*.f64 (+.f64 x 1) (*.f64 x x))
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
(/.f64 (*.f64 (fma.f64 x x -1) (*.f64 x x)) (+.f64 x -1))
Outputs
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
Calls

2 calls:

4.0ms
x
3.0ms
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
Results
ErrorSegmentsBranch
0.0b1x
0.0b1(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
Compiler

Compiled 54 to 23 computations (57.4% saved)

regimes4.0ms (0.2%)

Counts
4 → 1
Calls
Call 1
Inputs
(neg.f64 x)
(*.f64 x x)
(*.f64 (+.f64 x 1) (*.f64 x x))
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
Outputs
(*.f64 (+.f64 x 1) (*.f64 x x))
Calls

1 calls:

3.0ms
x
Results
ErrorSegmentsBranch
0.0b1x
Compiler

Compiled 23 to 11 computations (52.2% saved)

regimes4.0ms (0.1%)

Accuracy

Total -59.8b remaining (-4757.4%)

Threshold costs -59.8b (-4757.4%)

Counts
2 → 1
Calls
Call 1
Inputs
(neg.f64 x)
(*.f64 x x)
Outputs
(*.f64 x x)
Calls

1 calls:

3.0ms
x
Results
ErrorSegmentsBranch
1.3b1x
Compiler

Compiled 8 to 4 computations (50% saved)

simplify4.0ms (0.2%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
01238
12138
22338
32438
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(fma.f64 x x (pow.f64 x 3))
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
(*.f64 (+.f64 x 1) (*.f64 x x))
(*.f64 x x)
(neg.f64 x)
Outputs
(fma.f64 x x (pow.f64 x 3))
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
(+.f64 (*.f64 x x) (*.f64 x (*.f64 x x)))
(*.f64 (+.f64 x 1) (*.f64 x x))
(*.f64 (*.f64 x x) (+.f64 x 1))
(*.f64 x x)
(neg.f64 x)
Compiler

Compiled 32 to 17 computations (46.9% saved)

soundness238.0ms (8.1%)

Algorithm
egg-herbie
Rules
1274×sqr-pow_binary64
666×pow-sqr_binary64
635×cube-prod_binary64
563×fabs-mul_binary64
362×unswap-sqr_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0510
1158
2318
3468
4718
51238
62468
77098
814058
915068
1016398
1117978
1220368
1323608
1427848
1532878
1638878
1746118
1849308
1952168
2054408
2156188
2257008
2366408
2476148
Stop Event
node limit
Compiler

Compiled 36 to 16 computations (55.6% saved)

end28.0ms (1%)

Compiler

Compiled 28 to 11 computations (60.7% saved)

Profiling

Loading profile data...