Details

Time bar (total: 5.1s)

analyze6.0ms (0.1%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%100%0%0%0%0%0
0%0%100%0%0%0%0%1
0%0%100%0%0%0%0%2
50%50%50%0%0%0%0%3
75%75%25%0%0%0%0%4
87.5%87.5%12.5%0%0%0%0%5
93.8%93.7%6.2%0%0%0%0%6
96.9%96.8%3.1%0%0%0%0%7
98.4%98.4%1.6%0%0%0%0%8
99.2%99.2%0.8%0%0%0%0%9
99.6%99.6%0.4%0%0%0%0%10
99.8%99.8%0.2%0%0%0%0%11
99.9%99.9%0.1%0%0%0%0%12
Compiler

Compiled 8 to 7 computations (12.5% saved)

sample971.0ms (19.1%)

Results
959.0ms8256×body256valid
0.0msbody256infinite
Bogosity

preprocess172.0ms (3.4%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
069
1129
2239
3449
41089
53309
612559
721299
822939
924779
1026859
1129849
1233759
1338569
1444229
1551109
1659479
1763379
1866259
1969039
2069779
2170139
2279549
011
Stop Event
saturated
node limit
Calls
Call 1
Inputs
0
Outputs
0
Call 2
Inputs
(sqrt.f64 (*.f64 2 (pow.f64 x 2)))
Outputs
(sqrt.f64 (*.f64 2 (pow.f64 x 2)))
(sqrt.f64 (*.f64 2 (*.f64 x x)))
Compiler

Compiled 8 to 7 computations (12.5% saved)

simplify161.0ms (3.2%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
069
1129
2239
3449
41089
53309
612559
721299
822939
924779
1026859
1129849
1233759
1338569
1444229
1551109
1659479
1763379
1866259
1969039
2069779
2170139
2279549
Stop Event
node limit
Counts
1 → 2
Calls
Call 1
Inputs
(sqrt.f64 (*.f64 2 (pow.f64 x 2)))
Outputs
(sqrt.f64 (*.f64 2 (pow.f64 x 2)))
(sqrt.f64 (*.f64 2 (*.f64 x x)))

eval1.0ms (0%)

Compiler

Compiled 13 to 10 computations (23.1% saved)

prune1.0ms (0%)

Pruning

1 alts after pruning (1 fresh and 0 done)

PrunedKeptTotal
New112
Fresh101
Picked000
Done000
Total213
Error
28.8b
Counts
3 → 1
Alt Table
Click to see full alt table
StatusErrorProgram
28.8b
(sqrt.f64 (*.f64 2 (*.f64 x x)))
Compiler

Compiled 7 to 5 computations (28.6% saved)

localize7.0ms (0.1%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(*.f64 2 (*.f64 x x))
27.7b
(sqrt.f64 (*.f64 2 (*.f64 x x)))
Compiler

Compiled 17 to 8 computations (52.9% saved)

series3.0ms (0.1%)

Counts
2 → 24
Calls

6 calls:

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

rewrite101.0ms (2%)

Algorithm
batch-egg-rewrite
Rules
503×pow1_binary64
486×add-sqr-sqrt_binary64
466×add-log-exp_binary64
466×log1p-expm1-u_binary64
466×expm1-log1p-u_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify96.0ms (1.9%)

Algorithm
egg-herbie
Rules
964×fma-def_binary64
402×distribute-rgt-neg-out_binary64
365×fma-neg_binary64
337×distribute-rgt-neg-in_binary64
318×fabs-mul_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
09164
120164
243164
383164
4205164
5632164
6988164
71635164
82038164
92907164
103744164
114611164
125738164
Stop Event
node limit
Counts
60 → 40
Calls
Call 1
Inputs
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (pow.f64 x 2))
Outputs
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 x (neg.f64 (sqrt.f64 2)))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 x (neg.f64 (sqrt.f64 2)))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 x (neg.f64 (sqrt.f64 2)))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 x (neg.f64 (sqrt.f64 2)))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))
(*.f64 2 (pow.f64 x 2))
(*.f64 2 (*.f64 x x))

eval8.0ms (0.2%)

Compiler

Compiled 313 to 236 computations (24.6% saved)

prune66.0ms (1.3%)

Pruning

8 alts after pruning (7 fresh and 1 done)

PrunedKeptTotal
New33740
Fresh000
Picked011
Done000
Total33841
Error
0.1b
Counts
41 → 8
Alt Table
Click to see full alt table
StatusErrorProgram
28.4b
(pow.f64 (sqrt.f64 (*.f64 x (sqrt.f64 2))) 2)
28.8b
(sqrt.f64 (*.f64 2 (*.f64 x x)))
28.2b
(*.f64 (sqrt.f64 (*.f64 2 x)) (sqrt.f64 x))
31.3b
(sqrt.f64 (exp.f64 (log.f64 (*.f64 2 (*.f64 x x)))))
28.2b
(pow.f64 (cbrt.f64 (*.f64 x (sqrt.f64 2))) 3)
35.5b
(*.f64 x (neg.f64 (sqrt.f64 2)))
29.3b
(sqrt.f64 (pow.f64 (cbrt.f64 (*.f64 2 (*.f64 x x))) 3))
27.7b
(*.f64 (sqrt.f64 2) x)
Compiler

Compiled 115 to 93 computations (19.1% saved)

localize5.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.4b
(*.f64 (sqrt.f64 2) x)
Compiler

Compiled 9 to 7 computations (22.2% saved)

series1.0ms (0%)

Counts
1 → 0
Calls

3 calls:

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

rewrite46.0ms (0.9%)

Algorithm
batch-egg-rewrite
Rules
417×pow1_binary64
403×add-sqr-sqrt_binary64
395×*-un-lft-identity_binary64
386×add-log-exp_binary64
386×log1p-expm1-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
056
11006
210756
Stop Event
node limit
Counts
1 → 15
Calls
Call 1
Inputs
(*.f64 (sqrt.f64 2) x)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (sqrt.f64 2) x))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (sqrt.f64 2)) x))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 (sqrt.f64 2)) x))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 (sqrt.f64 2)) x)) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 (sqrt.f64 2)) x))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (*.f64 (sqrt.f64 2) x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 (sqrt.f64 2) x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 2 (*.f64 x x)) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 (sqrt.f64 2) x) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 (sqrt.f64 2) x)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 (sqrt.f64 2) x)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 2 (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 (sqrt.f64 2)) x))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 (sqrt.f64 2) x) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 (sqrt.f64 2) x)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 (sqrt.f64 2) x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 (sqrt.f64 2) x)))))))

simplify6.0ms (0.1%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

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

localize7.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.4b
(*.f64 x (neg.f64 (sqrt.f64 2)))
Compiler

Compiled 13 to 11 computations (15.4% saved)

series1.0ms (0%)

Counts
1 → 12
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@0
(*.f64 x (neg.f64 (sqrt.f64 2)))
0.0ms
x
@-inf
(*.f64 x (neg.f64 (sqrt.f64 2)))
0.0ms
x
@inf
(*.f64 x (neg.f64 (sqrt.f64 2)))

rewrite29.0ms (0.6%)

Algorithm
egg-rewrite-iter-limit
batch-egg-rewrite
Rules
61×add-sqr-sqrt_binary64
57×add-exp-log_binary64
57×add-log-exp_binary64
57×log1p-expm1-u_binary64
57×expm1-log1p-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
068
11258
214708
068
Stop Event
iter limit
unsound
Counts
1 → 7
Calls
Call 1
Inputs
(*.f64 x (neg.f64 (sqrt.f64 2)))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (*.f64 x (sqrt.f64 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (*.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) (*.f64 x (neg.f64 (sqrt.f64 2)))) (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))))

simplify17.0ms (0.3%)

Algorithm
egg-herbie
Rules
38×fma-def_binary64
sub-neg_binary64
+-commutative_binary64
*-commutative_binary64
distribute-lft-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0796
11296
22596
32996
43396
55196
67396
78496
89696
912196
Stop Event
saturated
Counts
19 → 9
Calls
Call 1
Inputs
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
Outputs
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))

localize9.0ms (0.2%)

Local error

Found 1 expressions with local error:

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

Compiled 19 to 12 computations (36.8% saved)

series2.0ms (0%)

Counts
1 → 12
Calls

3 calls:

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

rewrite196.0ms (3.9%)

Algorithm
batch-egg-rewrite
Rules
597×pow1_binary64
552×add-log-exp_binary64
552×log1p-expm1-u_binary64
552×expm1-log1p-u_binary64
537×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify18.0ms (0.4%)

Algorithm
egg-herbie
Rules
248×fma-def_binary64
22×distribute-rgt-in_binary64
21×associate-*l*_binary64
21×sub-neg_binary64
19×distribute-lft-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
012100
121100
253100
3104100
4119100
5167100
6239100
7276100
8322100
9499100
10527100
Stop Event
saturated
Counts
24 → 15
Calls
Call 1
Inputs
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 -1 (*.f64 (sqrt.f64 -1) (*.f64 (sqrt.f64 -2) x)))
(*.f64 -1 (*.f64 (sqrt.f64 -1) (*.f64 (sqrt.f64 -2) x)))
(*.f64 -1 (*.f64 (sqrt.f64 -1) (*.f64 (sqrt.f64 -2) x)))
(*.f64 -1 (*.f64 (sqrt.f64 -1) (*.f64 (sqrt.f64 -2) x)))
Outputs
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 -1 (*.f64 (sqrt.f64 -1) (*.f64 (sqrt.f64 -2) x)))
(neg.f64 (*.f64 (*.f64 (sqrt.f64 -1) (sqrt.f64 -2)) x))
(*.f64 (*.f64 (sqrt.f64 -1) (sqrt.f64 -2)) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 -1) (*.f64 (sqrt.f64 -2) x)))
(neg.f64 (*.f64 (*.f64 (sqrt.f64 -1) (sqrt.f64 -2)) x))
(*.f64 (*.f64 (sqrt.f64 -1) (sqrt.f64 -2)) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 -1) (*.f64 (sqrt.f64 -2) x)))
(neg.f64 (*.f64 (*.f64 (sqrt.f64 -1) (sqrt.f64 -2)) x))
(*.f64 (*.f64 (sqrt.f64 -1) (sqrt.f64 -2)) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 -1) (*.f64 (sqrt.f64 -2) x)))
(neg.f64 (*.f64 (*.f64 (sqrt.f64 -1) (sqrt.f64 -2)) x))
(*.f64 (*.f64 (sqrt.f64 -1) (sqrt.f64 -2)) (neg.f64 x))

localize14.0ms (0.3%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.4b
(*.f64 x (sqrt.f64 2))
0.6b
(cbrt.f64 (*.f64 x (sqrt.f64 2)))
0.7b
(pow.f64 (cbrt.f64 (*.f64 x (sqrt.f64 2))) 3)
Compiler

Compiled 22 to 18 computations (18.2% saved)

series7.0ms (0.1%)

Counts
3 → 12
Calls

9 calls:

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

rewrite55.0ms (1.1%)

Algorithm
batch-egg-rewrite
Rules
575×pow1_binary64
543×add-log-exp_binary64
542×log1p-expm1-u_binary64
542×expm1-log1p-u_binary64
530×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify9.0ms (0.2%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0572
1672
Stop Event
saturated
Counts
76 → 57
Calls
Call 1
Inputs
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
Outputs
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)

localize11.0ms (0.2%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.1b
(sqrt.f64 (*.f64 x (sqrt.f64 2)))
0.3b
(pow.f64 (sqrt.f64 (*.f64 x (sqrt.f64 2))) 2)
0.4b
(*.f64 x (sqrt.f64 2))
Compiler

Compiled 21 to 17 computations (19% saved)

series6.0ms (0.1%)

Counts
2 → 0
Calls

6 calls:

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

rewrite60.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
490×pow1_binary64
471×add-sqr-sqrt_binary64
462×*-un-lft-identity_binary64
454×add-log-exp_binary64
454×log1p-expm1-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify6.0ms (0.1%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

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

eval39.0ms (0.8%)

Compiler

Compiled 1462 to 1177 computations (19.5% saved)

prune259.0ms (5.1%)

Pruning

8 alts after pruning (4 fresh and 4 done)

PrunedKeptTotal
New1493152
Fresh112
Picked101
Done145
Total1528160
Error
0.1b
Counts
160 → 8
Alt Table
Click to see full alt table
StatusErrorProgram
28.2b
(*.f64 (sqrt.f64 (*.f64 2 x)) (sqrt.f64 x))
38.4b
(exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
35.5b
(*.f64 x (neg.f64 (sqrt.f64 2)))
28.3b
(pow.f64 (*.f64 (cbrt.f64 (sqrt.f64 2)) (cbrt.f64 x)) 3)
28.8b
(sqrt.f64 (*.f64 2 (*.f64 x x)))
27.7b
(*.f64 (pow.f64 2 1/4) (*.f64 (pow.f64 2 1/4) x))
29.3b
(sqrt.f64 (pow.f64 (cbrt.f64 (*.f64 2 (*.f64 x x))) 3))
27.7b
(*.f64 (sqrt.f64 2) x)
Compiler

Compiled 63 to 52 computations (17.5% saved)

localize20.0ms (0.4%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.0b
(log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))
0.4b
(*.f64 x (neg.f64 (sqrt.f64 2)))
2.4b
(exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
Compiler

Compiled 26 to 22 computations (15.4% saved)

series76.0ms (1.5%)

Counts
2 → 24
Calls

6 calls:

TimeVariablePointExpression
40.0ms
x
@0
(log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))
24.0ms
x
@-inf
(log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))
10.0ms
x
@inf
(log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))
1.0ms
x
@0
(exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
0.0ms
x
@-inf
(exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))

rewrite124.0ms (2.4%)

Algorithm
egg-rewrite-iter-limit
egg-rewrite
batch-egg-rewrite
Rules
69×add-sqr-sqrt_binary64
69×add-sqr-sqrt_binary64
69×add-sqr-sqrt_binary64
66×add-log-exp_binary64
66×add-log-exp_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0818
115018
2168018
088
11508
216808
088
0710
114310
2167310
0710
Stop Event
iter limit
unsound
iter limit
unsound
unsound
Counts
2 → 20
Calls
Call 1
Inputs
(exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
(log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x *.f64 x (neg.f64 (sqrt.f64 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (neg.f64 (sqrt.f64 2)) x)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 x (neg.f64 (sqrt.f64 2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (*.f64 x (sqrt.f64 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (*.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) (*.f64 x (neg.f64 (sqrt.f64 2)))) (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 x) (log.f64 (neg.f64 (sqrt.f64 2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (cbrt.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (sqrt.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (*.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))))

simplify90.0ms (1.8%)

Algorithm
egg-herbie
Rules
246×fma-neg_binary64
133×fma-def_binary64
67×cancel-sign-sub-inv_binary64
58×associate--r+_binary64
58×sub-neg_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
021248
143244
271244
3140244
4260244
5420244
6631244
7886244
81022244
91050244
Stop Event
saturated
Counts
44 → 27
Calls
Call 1
Inputs
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (*.f64 -1 (log.f64 (/.f64 1 x))))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (*.f64 -1 (log.f64 (/.f64 1 x))))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (*.f64 -1 (log.f64 (/.f64 1 x))))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (*.f64 -1 (log.f64 (/.f64 1 x))))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (sqrt.f64 2)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (sqrt.f64 2)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (sqrt.f64 2)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (sqrt.f64 2)))
Outputs
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (neg.f64 (sqrt.f64 2)) x)
(*.f64 (sqrt.f64 2) (neg.f64 x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (neg.f64 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (neg.f64 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (neg.f64 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (neg.f64 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (*.f64 -1 (log.f64 (/.f64 1 x))))
(+.f64 (log.f64 (neg.f64 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (*.f64 -1 (log.f64 (/.f64 1 x))))
(+.f64 (log.f64 (neg.f64 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (*.f64 -1 (log.f64 (/.f64 1 x))))
(+.f64 (log.f64 (neg.f64 (sqrt.f64 2))) (log.f64 x))
(+.f64 (log.f64 (*.f64 -1 (sqrt.f64 2))) (*.f64 -1 (log.f64 (/.f64 1 x))))
(+.f64 (log.f64 (neg.f64 (sqrt.f64 2))) (log.f64 x))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (sqrt.f64 2)))
(fma.f64 -1 (log.f64 (/.f64 -1 x)) (log.f64 (sqrt.f64 2)))
(-.f64 (log.f64 (sqrt.f64 2)) (log.f64 (/.f64 -1 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (sqrt.f64 2)))
(fma.f64 -1 (log.f64 (/.f64 -1 x)) (log.f64 (sqrt.f64 2)))
(-.f64 (log.f64 (sqrt.f64 2)) (log.f64 (/.f64 -1 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (sqrt.f64 2)))
(fma.f64 -1 (log.f64 (/.f64 -1 x)) (log.f64 (sqrt.f64 2)))
(-.f64 (log.f64 (sqrt.f64 2)) (log.f64 (/.f64 -1 x)))
(+.f64 (*.f64 -1 (log.f64 (/.f64 -1 x))) (log.f64 (sqrt.f64 2)))
(fma.f64 -1 (log.f64 (/.f64 -1 x)) (log.f64 (sqrt.f64 2)))
(-.f64 (log.f64 (sqrt.f64 2)) (log.f64 (/.f64 -1 x)))

localize17.0ms (0.3%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.0b
(*.f64 2 (*.f64 x x))
0.4b
(pow.f64 (cbrt.f64 (*.f64 2 (*.f64 x x))) 3)
27.7b
(sqrt.f64 (pow.f64 (cbrt.f64 (*.f64 2 (*.f64 x x))) 3))
28.5b
(cbrt.f64 (*.f64 2 (*.f64 x x)))
Compiler

Compiled 35 to 20 computations (42.9% saved)

series9.0ms (0.2%)

Counts
3 → 12
Calls

9 calls:

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

rewrite111.0ms (2.2%)

Algorithm
batch-egg-rewrite
Rules
649×pow1_binary64
612×add-log-exp_binary64
611×log1p-expm1-u_binary64
611×expm1-log1p-u_binary64
595×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify16.0ms (0.3%)

Algorithm
egg-herbie
Rules
38×fma-def_binary64
sub-neg_binary64
+-commutative_binary64
*-commutative_binary64
distribute-lft-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0780
11280
22580
32980
43380
55180
67380
78480
89680
912180
Stop Event
saturated
Counts
96 → 86
Calls
Call 1
Inputs
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
Outputs
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))

localize12.0ms (0.2%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.3b
(*.f64 (pow.f64 2 1/4) (*.f64 (pow.f64 2 1/4) x))
0.3b
(*.f64 (pow.f64 2 1/4) x)
Compiler

Compiled 21 to 18 computations (14.3% saved)

series22.0ms (0.4%)

Counts
2 → 12
Calls

6 calls:

TimeVariablePointExpression
20.0ms
x
@0
(*.f64 (pow.f64 2 1/4) x)
1.0ms
x
@inf
(*.f64 (pow.f64 2 1/4) x)
0.0ms
x
@-inf
(*.f64 (pow.f64 2 1/4) x)
0.0ms
x
@inf
(*.f64 (pow.f64 2 1/4) (*.f64 (pow.f64 2 1/4) x))
0.0ms
x
@-inf
(*.f64 (pow.f64 2 1/4) (*.f64 (pow.f64 2 1/4) x))

rewrite59.0ms (1.2%)

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

Useful iterations: 1 (0.0ms)

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

simplify7.0ms (0.1%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0572
1672
Stop Event
saturated
Counts
34 → 23
Calls
Call 1
Inputs
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
Outputs
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)
(*.f64 (sqrt.f64 2) x)

localize24.0ms (0.5%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.3b
(*.f64 (cbrt.f64 (sqrt.f64 2)) (cbrt.f64 x))
0.6b
(cbrt.f64 x)
0.7b
(pow.f64 (*.f64 (cbrt.f64 (sqrt.f64 2)) (cbrt.f64 x)) 3)
Compiler

Compiled 25 to 19 computations (24% saved)

series4.0ms (0.1%)

Counts
3 → 0
Calls

9 calls:

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

rewrite86.0ms (1.7%)

Algorithm
batch-egg-rewrite
Rules
708×pow1_binary64
664×add-log-exp_binary64
663×log1p-expm1-u_binary64
663×expm1-log1p-u_binary64
644×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify7.0ms (0.1%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

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

eval60.0ms (1.2%)

Compiler

Compiled 2287 to 1791 computations (21.7% saved)

prune61.0ms (1.2%)

Pruning

11 alts after pruning (4 fresh and 7 done)

PrunedKeptTotal
New2144218
Fresh000
Picked011
Done167
Total21511226
Error
0.0b
Counts
226 → 11
Alt Table
Click to see full alt table
StatusErrorProgram
28.2b
(*.f64 (sqrt.f64 (*.f64 2 x)) (sqrt.f64 x))
38.4b
(exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
35.5b
(*.f64 x (neg.f64 (sqrt.f64 2)))
28.3b
(pow.f64 (*.f64 (cbrt.f64 (sqrt.f64 2)) (cbrt.f64 x)) 3)
1.4b
(pow.f64 (*.f64 (cbrt.f64 (sqrt.f64 2)) (sqrt.f64 (pow.f64 (cbrt.f64 x) 2))) 3)
27.7b
(*.f64 (sqrt.f64 2) x)
35.9b
(*.f64 (*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
28.8b
(sqrt.f64 (*.f64 2 (*.f64 x x)))
27.7b
(*.f64 (pow.f64 2 1/4) (*.f64 (pow.f64 2 1/4) x))
29.3b
(pow.f64 (cbrt.f64 (*.f64 2 (*.f64 x x))) 3/2)
36.3b
(*.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
Compiler

Compiled 109 to 92 computations (15.6% saved)

localize16.0ms (0.3%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.1b
(sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))
0.2b
(*.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
0.4b
(*.f64 x (neg.f64 (sqrt.f64 2)))
Compiler

Compiled 32 to 27 computations (15.6% saved)

series6.0ms (0.1%)

Counts
2 → 12
Calls

6 calls:

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

rewrite112.0ms (2.2%)

Algorithm
egg-rewrite-iter-limit
egg-rewrite
batch-egg-rewrite
Rules
69×add-sqr-sqrt_binary64
69×add-sqr-sqrt_binary64
69×add-sqr-sqrt_binary64
65×add-exp-log_binary64
65×add-log-exp_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0818
116518
2171618
088
11658
217168
088
0710
114510
2168410
0710
Stop Event
iter limit
unsound
iter limit
unsound
unsound
Counts
2 → 20
Calls
Call 1
Inputs
(*.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
(sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (*.f64 x (sqrt.f64 2)))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (*.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (*.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) (*.f64 x (neg.f64 (sqrt.f64 2)))) (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))))
((#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (cbrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 x) (sqrt.f64 (neg.f64 (sqrt.f64 2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (sqrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))))

simplify129.0ms (2.5%)

Algorithm
egg-herbie
Rules
1037×fma-def_binary64
795×fabs-mul_binary64
775×cube-prod_binary64
741×sqr-pow_binary64
409×pow-sqr_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
011168
12596
25496
39196
419896
563296
690296
7109796
8191896
9293996
10321796
11347696
12379396
13418596
14466696
15530796
16620396
17738896
Stop Event
node limit
Counts
32 → 23
Calls
Call 1
Inputs
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
Outputs
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (*.f64 (pow.f64 (sqrt.f64 -1) 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))

localize29.0ms (0.6%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.3b
(*.f64 (*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
0.4b
(*.f64 x (neg.f64 (sqrt.f64 2)))
0.5b
(*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
0.6b
(cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))
Compiler

Compiled 52 to 44 computations (15.4% saved)

series36.0ms (0.7%)

Counts
3 → 12
Calls

9 calls:

TimeVariablePointExpression
30.0ms
x
@0
(*.f64 (*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
2.0ms
x
@-inf
(*.f64 (*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
1.0ms
x
@inf
(*.f64 (*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
1.0ms
x
@0
(*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
1.0ms
x
@0
(cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))

rewrite238.0ms (4.7%)

Algorithm
egg-rewrite-iter-limit
egg-rewrite
batch-egg-rewrite
Rules
78×add-sqr-sqrt_binary64
78×add-sqr-sqrt_binary64
77×add-sqr-sqrt_binary64
74×add-cbrt-cube_binary64
74×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0931
118031
2194231
0710
114410
2167510
0710
0813
116413
2187513
0813
098
11808
219428
098
Stop Event
iter limit
unsound
iter limit
unsound
iter limit
unsound
unsound
Counts
3 → 26
Calls
Call 1
Inputs
(cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))
(*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
(*.f64 (*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 x) (cbrt.f64 (neg.f64 (sqrt.f64 2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (cbrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (sqrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))))))))
((#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2) 1)))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (*.f64 (pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2) (pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2)) (pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2)))))))
((#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x neg.f64 (*.f64 x (sqrt.f64 2)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (*.f64 (*.f64 (*.f64 x (neg.f64 (sqrt.f64 2))) (*.f64 x (neg.f64 (sqrt.f64 2)))) (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))))))

simplify13.0ms (0.3%)

Algorithm
egg-herbie
Rules
38×fma-def_binary64
sub-neg_binary64
+-commutative_binary64
*-commutative_binary64
distribute-lft-in_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0796
11296
22596
32996
43396
55196
67396
78496
89696
912196
Stop Event
saturated
Counts
38 → 28
Calls
Call 1
Inputs
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
Outputs
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))
(*.f64 -1 (*.f64 (sqrt.f64 2) x))
(neg.f64 (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) (neg.f64 x))

localize131.0ms (2.6%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.0b
(*.f64 2 (*.f64 x x))
0.4b
(pow.f64 (cbrt.f64 (*.f64 2 (*.f64 x x))) 3/2)
28.5b
(cbrt.f64 (*.f64 2 (*.f64 x x)))
Compiler

Compiled 26 to 14 computations (46.2% saved)

series5.0ms (0.1%)

Counts
1 → 0
Calls

3 calls:

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

rewrite49.0ms (1%)

Algorithm
batch-egg-rewrite
Rules
645×pow1_binary64
606×add-log-exp_binary64
606×log1p-expm1-u_binary64
606×expm1-log1p-u_binary64
591×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify7.0ms (0.1%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

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

localize23.0ms (0.4%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.3b
(*.f64 (cbrt.f64 (sqrt.f64 2)) (sqrt.f64 (pow.f64 (cbrt.f64 x) 2)))
0.5b
(pow.f64 (cbrt.f64 x) 2)
0.6b
(cbrt.f64 x)
0.7b
(pow.f64 (*.f64 (cbrt.f64 (sqrt.f64 2)) (sqrt.f64 (pow.f64 (cbrt.f64 x) 2))) 3)
Compiler

Compiled 40 to 30 computations (25% saved)

series6.0ms (0.1%)

Counts
3 → 0
Calls

9 calls:

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

rewrite96.0ms (1.9%)

Algorithm
batch-egg-rewrite
Rules
761×pow1_binary64
712×add-log-exp_binary64
711×log1p-expm1-u_binary64
711×expm1-log1p-u_binary64
689×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify13.0ms (0.3%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

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

eval96.0ms (1.9%)

Compiler

Compiled 3756 to 3073 computations (18.2% saved)

prune43.0ms (0.8%)

Pruning

16 alts after pruning (7 fresh and 9 done)

PrunedKeptTotal
New2467253
Fresh000
Picked011
Done2810
Total24816264
Error
0.0b
Counts
264 → 16
Alt Table
Click to see full alt table
StatusErrorProgram
28.2b
(*.f64 (sqrt.f64 (*.f64 2 x)) (sqrt.f64 x))
38.4b
(exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
36.3b
(pow.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2)
28.8b
(sqrt.f64 (*.f64 2 (*.f64 x x)))
1.4b
(pow.f64 (*.f64 (cbrt.f64 (*.f64 2 x)) (cbrt.f64 x)) 3/2)
36.0b
(*.f64 (*.f64 (*.f64 (*.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (cbrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
27.7b
(*.f64 (pow.f64 2 1/4) (*.f64 (pow.f64 2 1/4) x))
29.3b
(pow.f64 (cbrt.f64 (*.f64 2 (*.f64 x x))) 3/2)
35.9b
(pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 3)
35.5b
(*.f64 x (neg.f64 (sqrt.f64 2)))
28.3b
(pow.f64 (*.f64 (cbrt.f64 (sqrt.f64 2)) (cbrt.f64 x)) 3)
1.4b
(pow.f64 (*.f64 (cbrt.f64 (sqrt.f64 2)) (sqrt.f64 (pow.f64 (cbrt.f64 x) 2))) 3)
35.8b
(*.f64 (*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (*.f64 (cbrt.f64 x) (cbrt.f64 (neg.f64 (sqrt.f64 2)))))
1.4b
(pow.f64 (pow.f64 (cbrt.f64 (*.f64 x (sqrt.f64 2))) 2) 3/2)
36.6b
(*.f64 (*.f64 (*.f64 (cbrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (cbrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
27.7b
(*.f64 (sqrt.f64 2) x)
Compiler

Compiled 203 to 174 computations (14.3% saved)

regimes60.0ms (1.2%)

Counts
23 → 2
Calls
Call 1
Inputs
(*.f64 (sqrt.f64 2) x)
(*.f64 x (neg.f64 (sqrt.f64 2)))
(sqrt.f64 (*.f64 2 (*.f64 x x)))
(sqrt.f64 (*.f64 2 (pow.f64 x 2)))
(*.f64 (sqrt.f64 (*.f64 2 x)) (sqrt.f64 x))
(pow.f64 (cbrt.f64 (*.f64 2 (*.f64 x x))) 3/2)
(*.f64 (pow.f64 2 1/4) (*.f64 (pow.f64 2 1/4) x))
(exp.f64 (log.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
(pow.f64 (sqrt.f64 (*.f64 x (sqrt.f64 2))) 2)
(pow.f64 (cbrt.f64 (*.f64 x (sqrt.f64 2))) 3)
(pow.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 2)
(pow.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) 3)
(sqrt.f64 (exp.f64 (log.f64 (*.f64 2 (*.f64 x x)))))
(pow.f64 (*.f64 (cbrt.f64 (*.f64 2 x)) (cbrt.f64 x)) 3/2)
(sqrt.f64 (pow.f64 (cbrt.f64 (*.f64 2 (*.f64 x x))) 3))
(pow.f64 (*.f64 (cbrt.f64 (sqrt.f64 2)) (cbrt.f64 x)) 3)
(pow.f64 (pow.f64 (cbrt.f64 (*.f64 x (sqrt.f64 2))) 2) 3/2)
(*.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
(pow.f64 (*.f64 (cbrt.f64 (sqrt.f64 2)) (sqrt.f64 (pow.f64 (cbrt.f64 x) 2))) 3)
(*.f64 (*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
(*.f64 (*.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (*.f64 (cbrt.f64 x) (cbrt.f64 (neg.f64 (sqrt.f64 2)))))
(*.f64 (*.f64 (*.f64 (cbrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (cbrt.f64 (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (sqrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
(*.f64 (*.f64 (*.f64 (*.f64 (cbrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (cbrt.f64 (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2))))) (cbrt.f64 (*.f64 x (neg.f64 (sqrt.f64 2)))))
Outputs
(*.f64 x (neg.f64 (sqrt.f64 2)))
(*.f64 (sqrt.f64 (*.f64 2 x)) (sqrt.f64 x))
Calls

4 calls:

23.0ms
x
11.0ms
(pow.f64 x 2)
9.0ms
(sqrt.f64 (*.f64 2 (pow.f64 x 2)))
8.0ms
(*.f64 2 (pow.f64 x 2))
Results
ErrorSegmentsBranch
0.3b2x
1.4b1(sqrt.f64 (*.f64 2 (pow.f64 x 2)))
1.4b1(*.f64 2 (pow.f64 x 2))
1.4b1(pow.f64 x 2)
Compiler

Compiled 277 to 226 computations (18.4% saved)

bsearch17.0ms (0.3%)

Algorithm
binary-search
Steps
TimeLeftRight
17.0ms
-8.071019112801398e-297
1.229338635343958e-286
Compiler

Compiled 11 to 9 computations (18.2% saved)

regimes133.0ms (2.6%)

Accuracy

Total -62.3b remaining (-14917.3%)

Threshold costs -62.3b (-14917.3%)

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

4 calls:

9.0ms
(sqrt.f64 (*.f64 2 (pow.f64 x 2)))
8.0ms
(*.f64 2 (pow.f64 x 2))
8.0ms
(pow.f64 x 2)
8.0ms
x
Results
ErrorSegmentsBranch
0.4b2x
12.2b3(sqrt.f64 (*.f64 2 (pow.f64 x 2)))
12.2b3(*.f64 2 (pow.f64 x 2))
12.2b3(pow.f64 x 2)
Compiler

Compiled 41 to 32 computations (22% saved)

bsearch18.0ms (0.3%)

Algorithm
binary-search
Steps
TimeLeftRight
18.0ms
-8.071019112801398e-297
1.229338635343958e-286
Compiler

Compiled 11 to 9 computations (18.2% saved)

simplify6.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
01651
12651
23351
33851
44151
54251
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(if (<=.f64 x -5942974730414331/736335108039604595805923406147184530889923370574768772191969612422073040099331944991573923112581267542507986451953227192970402893063850485730703075899286013451337291468249027691733891486704001513279827771740183629161065194874727962517148100775228363421083691764065477590823919364012917984605619526140822066036736) (*.f64 x (neg.f64 (sqrt.f64 2))) (*.f64 (sqrt.f64 (*.f64 2 x)) (sqrt.f64 x)))
(if (<=.f64 x -5942974730414331/736335108039604595805923406147184530889923370574768772191969612422073040099331944991573923112581267542507986451953227192970402893063850485730703075899286013451337291468249027691733891486704001513279827771740183629161065194874727962517148100775228363421083691764065477590823919364012917984605619526140822066036736) (*.f64 x (neg.f64 (sqrt.f64 2))) (*.f64 (sqrt.f64 2) x))
(*.f64 (sqrt.f64 2) x)
Outputs
(if (<=.f64 x -5942974730414331/736335108039604595805923406147184530889923370574768772191969612422073040099331944991573923112581267542507986451953227192970402893063850485730703075899286013451337291468249027691733891486704001513279827771740183629161065194874727962517148100775228363421083691764065477590823919364012917984605619526140822066036736) (*.f64 x (neg.f64 (sqrt.f64 2))) (*.f64 (sqrt.f64 (*.f64 2 x)) (sqrt.f64 x)))
(if (<=.f64 x -5942974730414331/736335108039604595805923406147184530889923370574768772191969612422073040099331944991573923112581267542507986451953227192970402893063850485730703075899286013451337291468249027691733891486704001513279827771740183629161065194874727962517148100775228363421083691764065477590823919364012917984605619526140822066036736) (neg.f64 (*.f64 x (sqrt.f64 2))) (*.f64 (sqrt.f64 (*.f64 x 2)) (sqrt.f64 x)))
(if (<=.f64 x -5942974730414331/736335108039604595805923406147184530889923370574768772191969612422073040099331944991573923112581267542507986451953227192970402893063850485730703075899286013451337291468249027691733891486704001513279827771740183629161065194874727962517148100775228363421083691764065477590823919364012917984605619526140822066036736) (*.f64 (sqrt.f64 2) (neg.f64 x)) (*.f64 (sqrt.f64 (*.f64 x 2)) (sqrt.f64 x)))
(if (<=.f64 x -5942974730414331/736335108039604595805923406147184530889923370574768772191969612422073040099331944991573923112581267542507986451953227192970402893063850485730703075899286013451337291468249027691733891486704001513279827771740183629161065194874727962517148100775228363421083691764065477590823919364012917984605619526140822066036736) (*.f64 x (neg.f64 (sqrt.f64 2))) (*.f64 (sqrt.f64 2) x))
(if (<=.f64 x -5942974730414331/736335108039604595805923406147184530889923370574768772191969612422073040099331944991573923112581267542507986451953227192970402893063850485730703075899286013451337291468249027691733891486704001513279827771740183629161065194874727962517148100775228363421083691764065477590823919364012917984605619526140822066036736) (neg.f64 (*.f64 x (sqrt.f64 2))) (*.f64 x (sqrt.f64 2)))
(if (<=.f64 x -5942974730414331/736335108039604595805923406147184530889923370574768772191969612422073040099331944991573923112581267542507986451953227192970402893063850485730703075899286013451337291468249027691733891486704001513279827771740183629161065194874727962517148100775228363421083691764065477590823919364012917984605619526140822066036736) (*.f64 (sqrt.f64 2) (neg.f64 x)) (*.f64 x (sqrt.f64 2)))
(*.f64 (sqrt.f64 2) x)
(*.f64 x (sqrt.f64 2))
Compiler

Compiled 36 to 28 computations (22.2% saved)

soundness565.0ms (11.1%)

Algorithm
egg-herbie
Rules
1082×sqr-pow_binary64
1082×sqr-pow_binary64
964×fma-def_binary64
617×cube-prod_binary64
617×cube-prod_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
069
1129
2239
3449
41089
53309
612559
721299
822939
924779
1026859
1129849
1233759
1338569
1444229
1551109
1659479
1763379
1866259
1969039
2069779
2170139
2279549
09164
120164
243164
383164
4205164
5632164
6988164
71635164
82038164
92907164
103744164
114611164
125738164
069
1129
2239
3449
41089
53309
612559
721299
822939
924779
1026859
1129849
1233759
1338569
1444229
1551109
1659479
1763379
1866259
1969039
2069779
2170139
2279549
Stop Event
node limit
node limit
node limit
Compiler

Compiled 53 to 43 computations (18.9% saved)

end33.0ms (0.6%)

Compiler

Compiled 34 to 25 computations (26.5% saved)

Profiling

Loading profile data...