Details

Time bar (total: 2.6s)

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.2s (47.1%)

Results
1.2s8256×body256valid

preprocess133.0ms (5%)

Algorithm
egg-herbie
Rules
1331×sqr-pow_binary64
715×pow-sqr_binary64
636×cube-prod_binary64
562×fabs-mul_binary64
362×unswap-sqr_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0510
1158
2318
3468
4718
51238
62398
76738
813648
914658
1015988
1117568
1219878
1323118
1427328
1532328
1638258
1745478
1848688
1951548
2053768
2155548
2256368
2365768
2475508
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))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))
Compiler

Compiled 11 to 5 computations (54.5% saved)

simplify124.0ms (4.7%)

Algorithm
egg-herbie
Rules
1331×sqr-pow_binary64
715×pow-sqr_binary64
636×cube-prod_binary64
562×fabs-mul_binary64
362×unswap-sqr_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0510
1158
2318
3468
4718
51238
62398
76738
813648
914658
1015988
1117568
1219878
1323118
1427328
1532328
1638258
1745478
1848688
1951548
2053768
2155548
2256368
2365768
2475508
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))
(fma.f64 x x (pow.f64 x 3))
(*.f64 x (fma.f64 x x x))

eval1.0ms (0%)

Compiler

Compiled 16 to 6 computations (62.5% saved)

prune1.0ms (0%)

Pruning

3 alts after pruning (3 fresh and 0 done)

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

Compiled 17 to 7 computations (58.8% saved)

localize4.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(*.f64 x (fma.f64 x x x))
0.0b
(*.f64 x (fma.f64 x x x))
Compiler

Compiled 12 to 3 computations (75% saved)

series3.0ms (0.1%)

Counts
1 → 12
Calls

3 calls:

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

rewrite44.0ms (1.7%)

Algorithm
batch-egg-rewrite
Rules
378×pow1_binary64
361×add-sqr-sqrt_binary64
356×*-un-lft-identity_binary64
347×add-log-exp_binary64
347×log1p-expm1-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
048
1798
29498
Stop Event
node limit
Counts
1 → 27
Calls
Call 1
Inputs
(*.f64 x (fma.f64 x x x))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (pow.f64 x 3) (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 x (fma.f64 x x x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 (fma.f64 x x x)) x)) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 (fma.f64 x x x)) x))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (fma.f64 x x x)) x))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (fma.f64 x x x)) x))))))) (#(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 pow.f64 (*.f64 x (fma.f64 x x x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (hypot.f64 (pow.f64 x 3/2) x) 4) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (hypot.f64 (pow.f64 x 3/2) x) 6) 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 (pow.f64 x 3/2) x) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (hypot.f64 (pow.f64 x 3/2) x) 4))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (fma.f64 x x x)) x))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 (pow.f64 x 3)) (exp.f64 (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (hypot.f64 (pow.f64 x 3/2) x) 6))))) (#(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 expm1.f64 (log1p.f64 (*.f64 x (fma.f64 x x x))))))) (#(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 1 (pow.f64 x 3) (*.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 (pow.f64 x 3/2) (pow.f64 x 3/2) (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (pow.f64 x 3)) (sqrt.f64 (pow.f64 x 3)) (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (*.f64 x (cbrt.f64 x)) 2) (cbrt.f64 x) (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 x 5/2) (sqrt.f64 x) (*.f64 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 exp.f64 (*.f64 (log.f64 (pow.f64 (hypot.f64 (pow.f64 x 3/2) x) 6)) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (*.f64 x (fma.f64 x x x)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (hypot.f64 (pow.f64 x 3/2) x)) 2))))))

simplify124.0ms (4.7%)

Algorithm
egg-herbie
Rules
1262×fma-def_binary64
969×sqr-pow_binary64
536×unswap-sqr_binary64
502×cube-prod_binary64
460×fabs-mul_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
07102
12084
24484
38184
420784
584384
6254084
7329184
8358584
9390584
10431584
11483984
12550784
13623684
14681284
15714284
16741684
17758584
18767684
Stop Event
node limit
Counts
39 → 32
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 (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))

localize5.0ms (0.2%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.1b
(*.f64 x (*.f64 x x))
0.0b
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
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)

series4.0ms (0.1%)

Counts
2 → 24
Calls

6 calls:

TimeVariablePointExpression
1.0ms
x
@0
(*.f64 x (*.f64 x x))
0.0ms
x
@inf
(*.f64 x (*.f64 x x))
0.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))

rewrite70.0ms (2.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
2160412
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 log1p.f64 (expm1.f64 (pow.f64 x 3)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.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 (*.f64 x x) (-.f64 x 1))) (/.f64 (pow.f64 x 4) (*.f64 (*.f64 x x) (-.f64 x 1))))))) (#(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 (*.f64 x x) (-.f64 x 1))))))) (#(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 (*.f64 x x) (-.f64 x 1)) (-.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 (*.f64 x x) (-.f64 x 1)))))) (#(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 (*.f64 x x) (-.f64 x 1))))))) (#(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 log1p.f64 (expm1.f64 (*.f64 x (fma.f64 x x x))))))) (#(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 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))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (fma.f64 x x x))))))))

simplify149.0ms (5.6%)

Algorithm
egg-herbie
Rules
1262×fma-def_binary64
969×sqr-pow_binary64
536×unswap-sqr_binary64
502×cube-prod_binary64
460×fabs-mul_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
07150
120132
244132
381132
4210132
5854132
62558132
73309132
83602132
93922132
104332132
114852132
125520132
136249132
146825132
157151132
167425132
177596132
187689132
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))

eval23.0ms (0.9%)

Compiler

Compiled 886 to 423 computations (52.3% saved)

prune12.0ms (0.5%)

Pruning

4 alts after pruning (3 fresh and 1 done)

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

Compiled 29 to 15 computations (48.3% saved)

localize6.0ms (0.2%)

Compiler

Compiled 12 to 7 computations (41.7% saved)

localize2.0ms (0.1%)

Compiler

Compiled 5 to 2 computations (60% saved)

localize7.0ms (0.3%)

Local error

Found 2 expressions with local error:

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

Compiled 16 to 8 computations (50% saved)

series1.0ms (0.1%)

Counts
1 → 12
Calls

3 calls:

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

rewrite42.0ms (1.6%)

Algorithm
batch-egg-rewrite
Rules
606×pow1_binary64
567×log1p-expm1-u_binary64
567×expm1-log1p-u_binary64
566×add-log-exp_binary64
552×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0610
112910
2167810
Stop Event
node limit
Counts
1 → 22
Calls
Call 1
Inputs
(*.f64 (*.f64 x x) (+.f64 x 1))
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 (pow.f64 x 3) 1) (*.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 (pow.f64 (pow.f64 x 3) 3) (pow.f64 (*.f64 x x) 3)) (+.f64 (pow.f64 (*.f64 x x) 3) (-.f64 (pow.f64 x 4) (*.f64 (pow.f64 x 3) (*.f64 x x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 x x) 3) (pow.f64 x 4)) (-.f64 (pow.f64 x 3) (*.f64 x x)))))) (#(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 log1p.f64 (expm1.f64 (+.f64 (*.f64 x x) (pow.f64 x 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 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 exp.f64 (+.f64 (*.f64 (log.f64 x) 2) (log1p.f64 x)))))))

simplify117.0ms (4.4%)

Algorithm
egg-herbie
Rules
1262×fma-def_binary64
969×sqr-pow_binary64
536×unswap-sqr_binary64
502×cube-prod_binary64
460×fabs-mul_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
07102
12084
24484
38184
420784
584384
6254084
7329184
8358584
9390584
10431584
11483984
12550784
13623684
14681284
15714284
16741684
17758584
18767684
Stop Event
node limit
Counts
34 → 27
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 (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))

eval6.0ms (0.2%)

Compiler

Compiled 268 to 149 computations (44.4% saved)

prune5.0ms (0.2%)

Pruning

4 alts after pruning (1 fresh and 3 done)

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

Compiled 35 to 19 computations (45.7% saved)

localize14.0ms (0.5%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (*.f64 x x) (fma.f64 x x -1))
0.0b
(/.f64 (*.f64 (*.f64 x x) (fma.f64 x x -1)) (+.f64 x -1))
0.0b
(/.f64 (*.f64 (*.f64 x x) (fma.f64 x x -1)) (+.f64 x -1))
0.0b
(*.f64 (*.f64 x x) (fma.f64 x 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
@inf
(/.f64 (*.f64 (*.f64 x x) (fma.f64 x x -1)) (+.f64 x -1))
1.0ms
x
@0
(*.f64 (*.f64 x x) (fma.f64 x x -1))
1.0ms
x
@inf
(*.f64 (*.f64 x x) (fma.f64 x x -1))
1.0ms
x
@-inf
(/.f64 (*.f64 (*.f64 x x) (fma.f64 x x -1)) (+.f64 x -1))
0.0ms
x
@-inf
(*.f64 (*.f64 x x) (fma.f64 x x -1))

rewrite59.0ms (2.2%)

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

Useful iterations: 1 (0.0ms)

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

simplify32.0ms (1.2%)

Algorithm
egg-herbie
Rules
786×fma-neg_binary64
698×cancel-sign-sub-inv_binary64
532×associate-*l*_binary64
514×distribute-rgt-neg-in_binary64
472×distribute-lft-neg-in_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
012215
131188
273188
3170188
4587188
53198188
Stop Event
node limit
Counts
88 → 74
Calls
Call 1
Inputs
(*.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))
(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
(*.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 x (-.f64 (pow.f64 x 3) 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 x (-.f64 (pow.f64 x 3) 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 x (-.f64 (pow.f64 x 3) 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 x (-.f64 (pow.f64 x 3) 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 x (-.f64 (pow.f64 x 3) 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 x (-.f64 (pow.f64 x 3) 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 x (-.f64 (pow.f64 x 3) 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 x (-.f64 (pow.f64 x 3) 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 x (-.f64 (pow.f64 x 3) x))
(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))

eval32.0ms (1.2%)

Compiler

Compiled 1099 to 720 computations (34.5% saved)

prune10.0ms (0.4%)

Pruning

5 alts after pruning (2 fresh and 3 done)

PrunedKeptTotal
New72274
Fresh000
Picked101
Done033
Total73578
Error
0b
Counts
78 → 5
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(*.f64 (*.f64 x x) (+.f64 x 1))
1.3b
(*.f64 x x)
0.6b
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
0.0b
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
0.0b
(/.f64 (*.f64 x (-.f64 (pow.f64 x 3) x)) (+.f64 x -1))
Compiler

Compiled 43 to 25 computations (41.9% saved)

localize14.0ms (0.5%)

Local error

Found 4 expressions with local error:

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

Compiled 33 to 21 computations (36.4% saved)

series32.0ms (1.2%)

Counts
2 → 24
Calls

6 calls:

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

rewrite62.0ms (2.3%)

Algorithm
batch-egg-rewrite
Rules
684×prod-diff_binary64
512×log-prod_binary64
429×fma-def_binary64
265×pow2_binary64
212×fma-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify35.0ms (1.3%)

Algorithm
egg-herbie
Rules
786×fma-neg_binary64
698×cancel-sign-sub-inv_binary64
525×associate-*l*_binary64
514×distribute-rgt-neg-in_binary64
472×distribute-lft-neg-in_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
012215
131188
273188
3170188
4584188
53164188
Stop Event
node limit
Counts
120 → 106
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))

localize8.0ms (0.3%)

Local error

Found 2 expressions with local error:

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

Compiled 20 to 9 computations (55% saved)

series1.0ms (0.1%)

Counts
1 → 12
Calls

3 calls:

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

rewrite50.0ms (1.9%)

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
2244010
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 (+.f64 x -1)) x)) 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 (+.f64 x -1)) x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 (/.f64 x (+.f64 x -1)) x))))) (#(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 (+.f64 x -1)) x)) (pow.f64 (cbrt.f64 (*.f64 (/.f64 x (+.f64 x -1)) x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (*.f64 (/.f64 x (+.f64 x -1)) x)) 2) (cbrt.f64 (*.f64 (/.f64 x (+.f64 x -1)) x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 x) 2) 2) (*.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 (pow.f64 (pow.f64 (cbrt.f64 x) 2) 2) 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 (pow.f64 (pow.f64 (cbrt.f64 x) 2) 2) (pow.f64 (cbrt.f64 (+.f64 x -1)) 2)) (cbrt.f64 (*.f64 (/.f64 x (+.f64 x -1)) x)))))) (#(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 (pow.f64 (pow.f64 (cbrt.f64 x) 2) 2) (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 (+.f64 x -1)) x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (/.f64 x (+.f64 x -1)) x) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (/.f64 x (+.f64 x -1)) x)) 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 (+.f64 x -1)) x))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 (/.f64 x (+.f64 x -1)) x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 (/.f64 x (+.f64 x -1)) x)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (/.f64 x (+.f64 x -1)) x) 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 log1p.f64 (expm1.f64 (*.f64 (/.f64 x (+.f64 x -1)) x)))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (/.f64 x (+.f64 x -1)) x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (-.f64 (log.f64 (*.f64 x x)) (log1p.f64 x)))))))

simplify37.0ms (1.4%)

Algorithm
egg-herbie
Rules
859×fma-def_binary64
559×associate-*l*_binary64
518×fma-neg_binary64
468×times-frac_binary64
461×associate-/r*_binary64
Iterations

Useful iterations: 4 (0.0ms)

IterNodesCost
024130
168124
2171114
3482114
41598112
55019112
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 (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 (+.f64 x (fma.f64 x x (pow.f64 x 3))) (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 x) (/.f64 -1 x))
(-.f64 (-.f64 -1 (/.f64 1 x)) x)
(+.f64 -1 (-.f64 (/.f64 -1 x) x))
(-.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 (-.f64 -1 x) (/.f64 -1 x)) (/.f64 1 (*.f64 x x)))
(+.f64 (-.f64 -1 (/.f64 1 x)) (-.f64 (/.f64 -1 (*.f64 x x)) x))
(+.f64 -1 (-.f64 (/.f64 (/.f64 -1 x) x) (-.f64 x (/.f64 -1 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 x) (/.f64 -1 x))
(-.f64 (-.f64 -1 (/.f64 1 x)) x)
(+.f64 -1 (-.f64 (/.f64 -1 x) x))
(-.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 (-.f64 -1 x) (/.f64 -1 x)) (/.f64 1 (*.f64 x x)))
(+.f64 (-.f64 -1 (/.f64 1 x)) (-.f64 (/.f64 -1 (*.f64 x x)) x))
(+.f64 -1 (-.f64 (/.f64 (/.f64 -1 x) x) (-.f64 x (/.f64 -1 x))))

eval46.0ms (1.7%)

Compiler

Compiled 2227 to 1473 computations (33.9% saved)

prune20.0ms (0.8%)

Pruning

6 alts after pruning (1 fresh and 5 done)

PrunedKeptTotal
New1561157
Fresh000
Picked011
Done044
Total1566162
Error
0b
Counts
162 → 6
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(*.f64 (*.f64 x x) (+.f64 x 1))
1.3b
(*.f64 x x)
60.5b
(neg.f64 x)
0.0b
(/.f64 (*.f64 x (-.f64 (pow.f64 x 3) x)) (+.f64 x -1))
0.6b
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
0.0b
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
Compiler

Compiled 46 to 27 computations (41.3% saved)

regimes8.0ms (0.3%)

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

2 calls:

4.0ms
x
2.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 53 to 24 computations (54.7% saved)

regimes8.0ms (0.3%)

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

2 calls:

3.0ms
x
2.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 42 to 17 computations (59.5% saved)

regimes4.0ms (0.2%)

Counts
4 → 1
Calls
Call 1
Inputs
(neg.f64 x)
(*.f64 x x)
(*.f64 (*.f64 x x) (+.f64 x 1))
(/.f64 (*.f64 x (neg.f64 x)) (+.f64 x -1))
Outputs
(*.f64 (*.f64 x x) (+.f64 x 1))
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.2b remaining (-4471.5%)

Threshold costs -59.2b (-4471.5%)

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)

simplify3.0ms (0.1%)

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
01646
12746
23046
33146
Stop Event
saturated
Calls
Call 1
Inputs
(/.f64 (*.f64 x (-.f64 (pow.f64 x 3) x)) (+.f64 x -1))
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
(*.f64 (*.f64 x x) (+.f64 x 1))
(*.f64 x x)
(neg.f64 x)
Outputs
(/.f64 (*.f64 x (-.f64 (pow.f64 x 3) x)) (+.f64 x -1))
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x))
(+.f64 (*.f64 x x) (*.f64 x (*.f64 x x)))
(*.f64 (*.f64 x x) (+.f64 x 1))
(*.f64 x x)
(neg.f64 x)

end35.0ms (1.3%)

Stop Event
fuel
Compiler

Compiled 70 to 36 computations (48.6% saved)

Profiling

Loading profile data...