Details

Time bar (total: 3.0s)

analyze4.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
66.7%50%25%0%25%0%0%4
80%50%12.5%0%37.5%0%0%5
88.9%50%6.2%0%43.7%0%0%6
94.1%50%3.1%0%46.9%0%0%7
97%50%1.6%0%48.4%0%0%8
98.5%50%0.8%0%49.2%0%0%9
99.2%50%0.4%0%49.6%0%0%10
99.6%50.2%0.2%0%49.6%0%0%11
99.8%50.2%0.1%0%49.7%0%0%12
Compiler

Compiled 9 to 7 computations (22.2% saved)

sample1.1s (35%)

Results
1.0s8256×body256valid
2.0ms18×body256infinite
Bogosity

preprocess63.0ms (2.1%)

Algorithm
egg-herbie
Rules
658×div-sub_binary64
631×fma-def_binary64
417×times-frac_binary64
408×associate-/l*_binary64
382×fma-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0711
1199
2509
31117
42367
55317
616187
756387
011
Stop Event
saturated
node limit
Calls
Call 1
Inputs
0
Outputs
0
Call 2
Inputs
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
Outputs
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
(exp.f64 (+.f64 -1 (*.f64 x x)))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
Compiler

Compiled 9 to 7 computations (22.2% saved)

simplify54.0ms (1.8%)

Algorithm
egg-herbie
Rules
658×div-sub_binary64
631×fma-def_binary64
417×times-frac_binary64
408×associate-/l*_binary64
382×fma-neg_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
0711
1199
2509
31117
42367
55317
616187
756387
Stop Event
node limit
Counts
1 → 2
Calls
Call 1
Inputs
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
Outputs
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
(exp.f64 (+.f64 -1 (*.f64 x x)))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))

eval1.0ms (0%)

Compiler

Compiled 13 to 9 computations (30.8% saved)

prune1.0ms (0%)

Pruning

2 alts after pruning (2 fresh and 0 done)

PrunedKeptTotal
New112
Fresh011
Picked000
Done000
Total123
Error
0.1b
Counts
3 → 1
Alt Table
Click to see full alt table
StatusErrorProgram
0.1b
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
Compiler

Compiled 8 to 6 computations (25% saved)

localize10.0ms (0.3%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.1b
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
Compiler

Compiled 24 to 12 computations (50% saved)

series2.0ms (0.1%)

Counts
1 → 12
Calls

3 calls:

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

rewrite46.0ms (1.5%)

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

Useful iterations: 1 (0.0ms)

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

simplify74.0ms (2.5%)

Algorithm
egg-herbie
Rules
723×distribute-lft-out_binary64
453×fma-neg_binary64
399×*-commutative_binary64
370×distribute-rgt-out_binary64
341×associate-*l*_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
024151
160131
2145119
3462112
41945112
53890112
65584112
77510112
Stop Event
node limit
Counts
38 → 35
Calls
Call 1
Inputs
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
Outputs
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1))
(*.f64 (exp.f64 -1) (fma.f64 x x 1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))
(fma.f64 (exp.f64 -1) (*.f64 x x) (fma.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)) (exp.f64 -1)))
(*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4))))
(*.f64 (exp.f64 -1) (fma.f64 1/2 (pow.f64 x 4) (fma.f64 x x 1)))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (fma.f64 (exp.f64 -1) (*.f64 x x) (fma.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)) (exp.f64 -1))))
(fma.f64 (exp.f64 -1) (*.f64 1/6 (pow.f64 x 6)) (*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4)))))
(*.f64 (exp.f64 -1) (+.f64 (*.f64 1/2 (pow.f64 x 4)) (fma.f64 1/6 (pow.f64 x 6) (fma.f64 x x 1))))
(*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (fma.f64 1/2 (pow.f64 x 4) (*.f64 1/6 (pow.f64 x 6)))))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))

eval9.0ms (0.3%)

Compiler

Compiled 359 to 249 computations (30.6% saved)

prune6.0ms (0.2%)

Pruning

5 alts after pruning (4 fresh and 1 done)

PrunedKeptTotal
New31435
Fresh000
Picked011
Done000
Total31536
Error
0.0b
Counts
36 → 5
Alt Table
Click to see full alt table
StatusErrorProgram
0.1b
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
0.1b
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
0.1b
(+.f64 1 (expm1.f64 (+.f64 -1 (*.f64 x x))))
0.1b
(expm1.f64 (log1p.f64 (exp.f64 (+.f64 -1 (*.f64 x x)))))
0.9b
(exp.f64 -1)
Compiler

Compiled 37 to 29 computations (21.6% saved)

localize3.0ms (0.1%)

Compiler

Compiled 4 to 4 computations (0% saved)

localize20.0ms (0.6%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.1b
(exp.f64 (+.f64 -1 (*.f64 x x)))
1.0b
(log1p.f64 (exp.f64 (+.f64 -1 (*.f64 x x))))
1.0b
(expm1.f64 (log1p.f64 (exp.f64 (+.f64 -1 (*.f64 x x)))))
Compiler

Compiled 32 to 17 computations (46.9% saved)

series41.0ms (1.4%)

Counts
3 → 36
Calls

9 calls:

TimeVariablePointExpression
37.0ms
x
@inf
(log1p.f64 (exp.f64 (+.f64 -1 (*.f64 x x))))
2.0ms
x
@0
(log1p.f64 (exp.f64 (+.f64 -1 (*.f64 x x))))
0.0ms
x
@0
(expm1.f64 (log1p.f64 (exp.f64 (+.f64 -1 (*.f64 x x)))))
0.0ms
x
@-inf
(log1p.f64 (exp.f64 (+.f64 -1 (*.f64 x x))))
0.0ms
x
@inf
(expm1.f64 (log1p.f64 (exp.f64 (+.f64 -1 (*.f64 x x)))))

rewrite55.0ms (1.8%)

Algorithm
batch-egg-rewrite
Rules
673×pow1_binary64
626×expm1-log1p-u_binary64
625×add-log-exp_binary64
625×log1p-expm1-u_binary64
611×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify40.0ms (1.3%)

Algorithm
egg-herbie
Rules
786×associate-*l/_binary64
728×associate-/l*_binary64
638×associate-*r/_binary64
610×associate-/r*_binary64
258×distribute-rgt-in_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
060620
1158551
2471516
32194509
Stop Event
node limit
Counts
99 → 58
Calls
Call 1
Inputs
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(log.f64 (+.f64 1 (exp.f64 -1)))
(+.f64 (log.f64 (+.f64 1 (exp.f64 -1))) (/.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 1 (exp.f64 -1))))
(+.f64 (log.f64 (+.f64 1 (exp.f64 -1))) (+.f64 (/.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 1 (exp.f64 -1))) (*.f64 1/24 (*.f64 (+.f64 (*.f64 -12 (/.f64 (pow.f64 (exp.f64 -1) 2) (pow.f64 (+.f64 1 (exp.f64 -1)) 2))) (*.f64 12 (/.f64 (exp.f64 -1) (+.f64 1 (exp.f64 -1))))) (pow.f64 x 4)))))
(+.f64 (*.f64 1/720 (*.f64 (+.f64 (*.f64 -360 (/.f64 (pow.f64 (exp.f64 -1) 2) (pow.f64 (+.f64 1 (exp.f64 -1)) 2))) (+.f64 (*.f64 120 (/.f64 (exp.f64 -1) (+.f64 1 (exp.f64 -1)))) (*.f64 240 (/.f64 (pow.f64 (exp.f64 -1) 3) (pow.f64 (+.f64 1 (exp.f64 -1)) 3))))) (pow.f64 x 6))) (+.f64 (log.f64 (+.f64 1 (exp.f64 -1))) (+.f64 (/.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 1 (exp.f64 -1))) (*.f64 1/24 (*.f64 (+.f64 (*.f64 -12 (/.f64 (pow.f64 (exp.f64 -1) 2) (pow.f64 (+.f64 1 (exp.f64 -1)) 2))) (*.f64 12 (/.f64 (exp.f64 -1) (+.f64 1 (exp.f64 -1))))) (pow.f64 x 4))))))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
Outputs
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1))
(*.f64 (+.f64 (*.f64 x x) 1) (exp.f64 -1))
(*.f64 (exp.f64 -1) (fma.f64 x x 1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))
(fma.f64 (exp.f64 -1) (*.f64 x x) (fma.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)) (exp.f64 -1)))
(*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4))))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (fma.f64 (exp.f64 -1) (*.f64 x x) (fma.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)) (exp.f64 -1))))
(fma.f64 (exp.f64 -1) (*.f64 1/6 (pow.f64 x 6)) (*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4)))))
(*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (+.f64 (*.f64 1/2 (pow.f64 x 4)) (*.f64 1/6 (pow.f64 x 6)))))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(log.f64 (+.f64 1 (exp.f64 -1)))
(log1p.f64 (exp.f64 -1))
(+.f64 (log.f64 (+.f64 1 (exp.f64 -1))) (/.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 1 (exp.f64 -1))))
(+.f64 (log1p.f64 (exp.f64 -1)) (/.f64 (*.f64 (exp.f64 -1) (*.f64 x x)) (+.f64 (exp.f64 -1) 1)))
(fma.f64 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) (*.f64 x x) (log1p.f64 (exp.f64 -1)))
(+.f64 (log.f64 (+.f64 1 (exp.f64 -1))) (+.f64 (/.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 1 (exp.f64 -1))) (*.f64 1/24 (*.f64 (+.f64 (*.f64 -12 (/.f64 (pow.f64 (exp.f64 -1) 2) (pow.f64 (+.f64 1 (exp.f64 -1)) 2))) (*.f64 12 (/.f64 (exp.f64 -1) (+.f64 1 (exp.f64 -1))))) (pow.f64 x 4)))))
(+.f64 (log1p.f64 (exp.f64 -1)) (+.f64 (/.f64 (*.f64 (exp.f64 -1) (*.f64 x x)) (+.f64 (exp.f64 -1) 1)) (*.f64 1/24 (*.f64 (pow.f64 x 4) (fma.f64 -12 (/.f64 (pow.f64 (exp.f64 -1) 2) (pow.f64 (+.f64 (exp.f64 -1) 1) 2)) (*.f64 12 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1))))))))
(+.f64 (log1p.f64 (exp.f64 -1)) (fma.f64 1/24 (*.f64 (pow.f64 x 4) (fma.f64 12 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) (/.f64 -12 (/.f64 (pow.f64 (+.f64 (exp.f64 -1) 1) 2) (exp.f64 -2))))) (/.f64 (*.f64 (exp.f64 -1) (*.f64 x x)) (+.f64 (exp.f64 -1) 1))))
(fma.f64 (pow.f64 x 4) (+.f64 (/.f64 -1/2 (/.f64 (pow.f64 (+.f64 (exp.f64 -1) 1) 2) (exp.f64 -2))) (*.f64 1/2 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)))) (fma.f64 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) (*.f64 x x) (log1p.f64 (exp.f64 -1))))
(fma.f64 (pow.f64 x 4) (+.f64 (*.f64 (/.f64 -1/2 (pow.f64 (+.f64 (exp.f64 -1) 1) 2)) (exp.f64 -2)) (/.f64 1/2 (/.f64 (+.f64 (exp.f64 -1) 1) (exp.f64 -1)))) (fma.f64 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) (*.f64 x x) (log1p.f64 (exp.f64 -1))))
(+.f64 (*.f64 1/720 (*.f64 (+.f64 (*.f64 -360 (/.f64 (pow.f64 (exp.f64 -1) 2) (pow.f64 (+.f64 1 (exp.f64 -1)) 2))) (+.f64 (*.f64 120 (/.f64 (exp.f64 -1) (+.f64 1 (exp.f64 -1)))) (*.f64 240 (/.f64 (pow.f64 (exp.f64 -1) 3) (pow.f64 (+.f64 1 (exp.f64 -1)) 3))))) (pow.f64 x 6))) (+.f64 (log.f64 (+.f64 1 (exp.f64 -1))) (+.f64 (/.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 1 (exp.f64 -1))) (*.f64 1/24 (*.f64 (+.f64 (*.f64 -12 (/.f64 (pow.f64 (exp.f64 -1) 2) (pow.f64 (+.f64 1 (exp.f64 -1)) 2))) (*.f64 12 (/.f64 (exp.f64 -1) (+.f64 1 (exp.f64 -1))))) (pow.f64 x 4))))))
(fma.f64 1/720 (*.f64 (pow.f64 x 6) (fma.f64 -360 (/.f64 (pow.f64 (exp.f64 -1) 2) (pow.f64 (+.f64 (exp.f64 -1) 1) 2)) (fma.f64 120 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) (*.f64 240 (/.f64 (pow.f64 (exp.f64 -1) 3) (pow.f64 (+.f64 (exp.f64 -1) 1) 3)))))) (+.f64 (log1p.f64 (exp.f64 -1)) (+.f64 (/.f64 (*.f64 (exp.f64 -1) (*.f64 x x)) (+.f64 (exp.f64 -1) 1)) (*.f64 1/24 (*.f64 (pow.f64 x 4) (fma.f64 -12 (/.f64 (pow.f64 (exp.f64 -1) 2) (pow.f64 (+.f64 (exp.f64 -1) 1) 2)) (*.f64 12 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)))))))))
(+.f64 (fma.f64 1/24 (*.f64 (pow.f64 x 4) (fma.f64 12 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) (/.f64 -12 (/.f64 (pow.f64 (+.f64 (exp.f64 -1) 1) 2) (exp.f64 -2))))) (/.f64 (*.f64 (exp.f64 -1) (*.f64 x x)) (+.f64 (exp.f64 -1) 1))) (fma.f64 (*.f64 1/720 (fma.f64 (/.f64 (exp.f64 -2) (pow.f64 (+.f64 (exp.f64 -1) 1) 2)) -360 (fma.f64 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) 120 (/.f64 (*.f64 240 (pow.f64 (exp.f64 -1) 3)) (pow.f64 (+.f64 (exp.f64 -1) 1) 3))))) (pow.f64 x 6) (log1p.f64 (exp.f64 -1))))
(fma.f64 (pow.f64 x 6) (*.f64 1/720 (fma.f64 (/.f64 (exp.f64 -2) (pow.f64 (+.f64 (exp.f64 -1) 1) 2)) -360 (fma.f64 240 (pow.f64 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) 3) (*.f64 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) 120)))) (fma.f64 (pow.f64 x 4) (+.f64 (/.f64 -1/2 (/.f64 (pow.f64 (+.f64 (exp.f64 -1) 1) 2) (exp.f64 -2))) (*.f64 1/2 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)))) (fma.f64 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) (*.f64 x x) (log1p.f64 (exp.f64 -1)))))
(fma.f64 (pow.f64 x 6) (*.f64 1/720 (fma.f64 240 (/.f64 (exp.f64 -3) (pow.f64 (+.f64 (exp.f64 -1) 1) 3)) (*.f64 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) (+.f64 (*.f64 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) -360) 120)))) (fma.f64 (pow.f64 x 4) (+.f64 (*.f64 (/.f64 -1/2 (pow.f64 (+.f64 (exp.f64 -1) 1) 2)) (exp.f64 -2)) (/.f64 1/2 (/.f64 (+.f64 (exp.f64 -1) 1) (exp.f64 -1)))) (fma.f64 (/.f64 (exp.f64 -1) (+.f64 (exp.f64 -1) 1)) (*.f64 x x) (log1p.f64 (exp.f64 -1)))))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log1p.f64 (exp.f64 (+.f64 (*.f64 x x) -1)))
(log1p.f64 (exp.f64 (fma.f64 x x -1)))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log1p.f64 (exp.f64 (+.f64 (*.f64 x x) -1)))
(log1p.f64 (exp.f64 (fma.f64 x x -1)))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log1p.f64 (exp.f64 (+.f64 (*.f64 x x) -1)))
(log1p.f64 (exp.f64 (fma.f64 x x -1)))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log1p.f64 (exp.f64 (+.f64 (*.f64 x x) -1)))
(log1p.f64 (exp.f64 (fma.f64 x x -1)))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log1p.f64 (exp.f64 (+.f64 (*.f64 x x) -1)))
(log1p.f64 (exp.f64 (fma.f64 x x -1)))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log1p.f64 (exp.f64 (+.f64 (*.f64 x x) -1)))
(log1p.f64 (exp.f64 (fma.f64 x x -1)))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log1p.f64 (exp.f64 (+.f64 (*.f64 x x) -1)))
(log1p.f64 (exp.f64 (fma.f64 x x -1)))
(log.f64 (+.f64 1 (exp.f64 (-.f64 (pow.f64 x 2) 1))))
(log1p.f64 (exp.f64 (+.f64 (*.f64 x x) -1)))
(log1p.f64 (exp.f64 (fma.f64 x x -1)))
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1))
(*.f64 (+.f64 (*.f64 x x) 1) (exp.f64 -1))
(*.f64 (exp.f64 -1) (fma.f64 x x 1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))
(fma.f64 (exp.f64 -1) (*.f64 x x) (fma.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)) (exp.f64 -1)))
(*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4))))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (fma.f64 (exp.f64 -1) (*.f64 x x) (fma.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)) (exp.f64 -1))))
(fma.f64 (exp.f64 -1) (*.f64 1/6 (pow.f64 x 6)) (*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4)))))
(*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (+.f64 (*.f64 1/2 (pow.f64 x 4)) (*.f64 1/6 (pow.f64 x 6)))))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))

localize11.0ms (0.3%)

Local error

Found 2 expressions with local error:

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

Compiled 26 to 14 computations (46.2% saved)

series2.0ms (0.1%)

Counts
2 → 24
Calls

6 calls:

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

rewrite111.0ms (3.7%)

Algorithm
batch-egg-rewrite
Rules
807×pow1_binary64
752×add-log-exp_binary64
751×log1p-expm1-u_binary64
751×expm1-log1p-u_binary64
738×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify67.0ms (2.2%)

Algorithm
egg-herbie
Rules
699×distribute-lft-out_binary64
543×fma-def_binary64
480×fma-neg_binary64
415×*-commutative_binary64
351×distribute-rgt-out_binary64
Iterations

Useful iterations: 4 (0.0ms)

IterNodesCost
029310
176266
2194245
3651229
42618227
56452227
Stop Event
node limit
Counts
78 → 72
Calls
Call 1
Inputs
(-.f64 (exp.f64 -1) 1)
(-.f64 (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1)) 1)
(-.f64 (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))) 1)
(-.f64 (+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))) 1)
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
Outputs
(-.f64 (exp.f64 -1) 1)
(expm1.f64 -1)
(-.f64 (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1)) 1)
(+.f64 (*.f64 (exp.f64 -1) (*.f64 x x)) (expm1.f64 -1))
(fma.f64 (exp.f64 -1) (*.f64 x x) (expm1.f64 -1))
(fma.f64 (fma.f64 x x 1) (exp.f64 -1) -1)
(fma.f64 (exp.f64 -1) (fma.f64 x x 1) -1)
(-.f64 (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))) 1)
(+.f64 (+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))) -1)
(fma.f64 (exp.f64 -1) (*.f64 x x) (+.f64 (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))) (expm1.f64 -1)))
(+.f64 -1 (*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4)))))
(fma.f64 (exp.f64 -1) (fma.f64 1/2 (pow.f64 x 4) (fma.f64 x x 1)) -1)
(-.f64 (+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))) 1)
(+.f64 (fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))) -1)
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (fma.f64 (exp.f64 -1) (*.f64 x x) (+.f64 (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))) (expm1.f64 -1))))
(+.f64 (fma.f64 (fma.f64 x x 1) (exp.f64 -1) -1) (*.f64 (exp.f64 -1) (+.f64 (*.f64 1/2 (pow.f64 x 4)) (*.f64 1/6 (pow.f64 x 6)))))
(+.f64 -1 (*.f64 (exp.f64 -1) (+.f64 (*.f64 1/6 (pow.f64 x 6)) (fma.f64 1/2 (pow.f64 x 4) (fma.f64 x x 1)))))
(fma.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (fma.f64 1/2 (pow.f64 x 4) (*.f64 1/6 (pow.f64 x 6)))) -1)
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(expm1.f64 (+.f64 (*.f64 x x) -1))
(expm1.f64 (fma.f64 x x -1))
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(expm1.f64 (+.f64 (*.f64 x x) -1))
(expm1.f64 (fma.f64 x x -1))
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(expm1.f64 (+.f64 (*.f64 x x) -1))
(expm1.f64 (fma.f64 x x -1))
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(expm1.f64 (+.f64 (*.f64 x x) -1))
(expm1.f64 (fma.f64 x x -1))
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(expm1.f64 (+.f64 (*.f64 x x) -1))
(expm1.f64 (fma.f64 x x -1))
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(expm1.f64 (+.f64 (*.f64 x x) -1))
(expm1.f64 (fma.f64 x x -1))
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(expm1.f64 (+.f64 (*.f64 x x) -1))
(expm1.f64 (fma.f64 x x -1))
(-.f64 (exp.f64 (-.f64 (pow.f64 x 2) 1)) 1)
(expm1.f64 (+.f64 (*.f64 x x) -1))
(expm1.f64 (fma.f64 x x -1))
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1))
(*.f64 (+.f64 (*.f64 x x) 1) (exp.f64 -1))
(*.f64 (exp.f64 -1) (fma.f64 x x 1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))
(fma.f64 (exp.f64 -1) (*.f64 x x) (fma.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)) (exp.f64 -1)))
(*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4))))
(*.f64 (exp.f64 -1) (fma.f64 1/2 (pow.f64 x 4) (fma.f64 x x 1)))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (fma.f64 (exp.f64 -1) (*.f64 x x) (fma.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)) (exp.f64 -1))))
(fma.f64 (exp.f64 -1) (*.f64 1/6 (pow.f64 x 6)) (*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4)))))
(*.f64 (exp.f64 -1) (+.f64 (*.f64 1/6 (pow.f64 x 6)) (fma.f64 1/2 (pow.f64 x 4) (fma.f64 x x 1))))
(*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (fma.f64 1/2 (pow.f64 x 4) (*.f64 1/6 (pow.f64 x 6)))))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))

localize21.0ms (0.7%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.1b
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
Compiler

Compiled 19 to 9 computations (52.6% saved)

series4.0ms (0.1%)

Counts
1 → 12
Calls

3 calls:

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

rewrite67.0ms (2.2%)

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

Useful iterations: 1 (0.0ms)

IterNodesCost
0711
11527
219137
Stop Event
node limit
Counts
1 → 18
Calls
Call 1
Inputs
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 1 (expm1.f64 (fma.f64 x x -1)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (exp.f64 (fma.f64 x x -1))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (exp.f64 (fma.f64 x x -1)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (exp.f64 (fma.f64 x x -1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (exp.f64 (fma.f64 x x -1))) (pow.f64 (cbrt.f64 (exp.f64 (fma.f64 x x -1))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (exp.f64 (fma.f64 x x -1))) 2) (cbrt.f64 (exp.f64 (fma.f64 x x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (exp.f64 -1) (pow.f64 (exp.f64 x) x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (exp.f64 (fma.f64 x x -1))) (sqrt.f64 (exp.f64 (fma.f64 x x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 (fma.f64 x x -1)) (exp.f64 (fma.f64 x x -1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (exp.f64 2)) (fma.f64 x x -1)) (pow.f64 (cbrt.f64 (E.f64)) (fma.f64 x x -1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (E.f64)) (fma.f64 x x -1)) (pow.f64 (sqrt.f64 (E.f64)) (fma.f64 x x -1)))))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (exp.f64 (fma.f64 x x -1)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (exp.f64 (fma.f64 x x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (exp.f64 (fma.f64 x x -1)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (exp.f64 (fma.f64 x x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (exp.f64 (fma.f64 x x -1))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (fma.f64 x x -1))))))

simplify98.0ms (3.2%)

Algorithm
egg-herbie
Rules
723×distribute-lft-out_binary64
453×fma-neg_binary64
399×*-commutative_binary64
370×distribute-rgt-out_binary64
341×associate-*l*_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
024151
160131
2145119
3462112
41945112
53890112
65584112
77510112
Stop Event
node limit
Counts
30 → 26
Calls
Call 1
Inputs
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
Outputs
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1))
(*.f64 (exp.f64 -1) (fma.f64 x x 1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))
(fma.f64 (exp.f64 -1) (*.f64 x x) (fma.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)) (exp.f64 -1)))
(*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4))))
(*.f64 (exp.f64 -1) (fma.f64 1/2 (pow.f64 x 4) (fma.f64 x x 1)))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(fma.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6)) (fma.f64 (exp.f64 -1) (*.f64 x x) (fma.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)) (exp.f64 -1))))
(fma.f64 (exp.f64 -1) (*.f64 1/6 (pow.f64 x 6)) (*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (*.f64 1/2 (pow.f64 x 4)))))
(*.f64 (exp.f64 -1) (+.f64 (*.f64 1/2 (pow.f64 x 4)) (fma.f64 1/6 (pow.f64 x 6) (fma.f64 x x 1))))
(*.f64 (exp.f64 -1) (+.f64 (fma.f64 x x 1) (fma.f64 1/2 (pow.f64 x 4) (*.f64 1/6 (pow.f64 x 6)))))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(exp.f64 (-.f64 (pow.f64 x 2) 1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))

eval169.0ms (5.6%)

Compiler

Compiled 2062 to 1640 computations (20.5% saved)

prune39.0ms (1.3%)

Pruning

5 alts after pruning (1 fresh and 4 done)

PrunedKeptTotal
New1551156
Fresh000
Picked011
Done134
Total1565161
Error
0.0b
Counts
161 → 5
Alt Table
Click to see full alt table
StatusErrorProgram
0.1b
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
0.1b
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
0.1b
(+.f64 1 (expm1.f64 (+.f64 -1 (*.f64 x x))))
0.0b
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
0.9b
(exp.f64 -1)
Compiler

Compiled 36 to 28 computations (22.2% saved)

localize21.0ms (0.7%)

Local error

Found 2 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
0.0b
(pow.f64 (exp.f64 x) x)
Compiler

Compiled 18 to 9 computations (50% saved)

series5.0ms (0.2%)

Counts
2 → 24
Calls

6 calls:

TimeVariablePointExpression
2.0ms
x
@0
(pow.f64 (exp.f64 x) x)
1.0ms
x
@inf
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
1.0ms
x
@inf
(pow.f64 (exp.f64 x) x)
1.0ms
x
@-inf
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
1.0ms
x
@0
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))

rewrite77.0ms (2.6%)

Algorithm
batch-egg-rewrite
Rules
575×pow1_binary64
528×add-log-exp_binary64
528×log1p-expm1-u_binary64
528×expm1-log1p-u_binary64
514×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

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

simplify88.0ms (2.9%)

Algorithm
egg-herbie
Rules
479×fma-def_binary64
476×distribute-rgt-out_binary64
437×*-commutative_binary64
416×associate-*l*_binary64
351×distribute-lft-out_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
031246
178218
2199200
3595195
42377195
54635195
65600195
Stop Event
node limit
Counts
50 → 44
Calls
Call 1
Inputs
1
(+.f64 1 (pow.f64 x 2))
(+.f64 1 (+.f64 (pow.f64 x 2) (*.f64 1/2 (pow.f64 x 4))))
(+.f64 1 (+.f64 (*.f64 1/6 (pow.f64 x 6)) (+.f64 (pow.f64 x 2) (*.f64 1/2 (pow.f64 x 4)))))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
Outputs
1
(+.f64 1 (pow.f64 x 2))
(+.f64 1 (*.f64 x x))
(fma.f64 x x 1)
(+.f64 1 (+.f64 (pow.f64 x 2) (*.f64 1/2 (pow.f64 x 4))))
(+.f64 1 (+.f64 (*.f64 x x) (*.f64 1/2 (pow.f64 x 4))))
(+.f64 1 (fma.f64 x x (*.f64 1/2 (pow.f64 x 4))))
(fma.f64 x x (fma.f64 1/2 (pow.f64 x 4) 1))
(+.f64 1 (+.f64 (*.f64 1/6 (pow.f64 x 6)) (+.f64 (pow.f64 x 2) (*.f64 1/2 (pow.f64 x 4)))))
(+.f64 1 (fma.f64 1/6 (pow.f64 x 6) (+.f64 (*.f64 x x) (*.f64 1/2 (pow.f64 x 4)))))
(+.f64 1 (fma.f64 1/6 (pow.f64 x 6) (fma.f64 x x (*.f64 1/2 (pow.f64 x 4)))))
(fma.f64 1/6 (pow.f64 x 6) (fma.f64 x x (fma.f64 1/2 (pow.f64 x 4) 1)))
(fma.f64 x x (fma.f64 1/2 (pow.f64 x 4) (fma.f64 1/6 (pow.f64 x 6) 1)))
(fma.f64 x x (fma.f64 1/6 (pow.f64 x 6) (fma.f64 1/2 (pow.f64 x 4) 1)))
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 -1)
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (exp.f64 -1))
(fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1))
(*.f64 (fma.f64 x x 1) (exp.f64 -1))
(+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4)))))
(+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 (*.f64 1/2 (exp.f64 -1)) (pow.f64 x 4)))
(+.f64 (*.f64 (fma.f64 x x 1) (exp.f64 -1)) (*.f64 1/2 (*.f64 (pow.f64 x 4) (exp.f64 -1))))
(*.f64 (exp.f64 -1) (fma.f64 x x (fma.f64 1/2 (pow.f64 x 4) 1)))
(*.f64 (fma.f64 x x (fma.f64 1/2 (pow.f64 x 4) 1)) (exp.f64 -1))
(+.f64 (*.f64 1/6 (*.f64 (exp.f64 -1) (pow.f64 x 6))) (+.f64 (*.f64 (exp.f64 -1) (pow.f64 x 2)) (+.f64 (exp.f64 -1) (*.f64 1/2 (*.f64 (exp.f64 -1) (pow.f64 x 4))))))
(fma.f64 1/6 (*.f64 (pow.f64 x 6) (exp.f64 -1)) (+.f64 (fma.f64 (exp.f64 -1) (*.f64 x x) (exp.f64 -1)) (*.f64 (*.f64 1/2 (exp.f64 -1)) (pow.f64 x 4))))
(fma.f64 1/6 (*.f64 (pow.f64 x 6) (exp.f64 -1)) (+.f64 (*.f64 (fma.f64 x x 1) (exp.f64 -1)) (*.f64 1/2 (*.f64 (pow.f64 x 4) (exp.f64 -1)))))
(fma.f64 (fma.f64 x x 1) (exp.f64 -1) (*.f64 (exp.f64 -1) (fma.f64 1/2 (pow.f64 x 4) (*.f64 1/6 (pow.f64 x 6)))))
(*.f64 (exp.f64 -1) (fma.f64 x x (fma.f64 1/2 (pow.f64 x 4) (fma.f64 1/6 (pow.f64 x 6) 1))))
(*.f64 (fma.f64 x x (fma.f64 1/2 (pow.f64 x 4) (fma.f64 1/6 (pow.f64 x 6) 1))) (exp.f64 -1))
(*.f64 (fma.f64 x x (fma.f64 1/6 (pow.f64 x 6) (fma.f64 1/2 (pow.f64 x 4) 1))) (exp.f64 -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))
(*.f64 (exp.f64 (pow.f64 x 2)) (exp.f64 -1))
(exp.f64 (+.f64 (*.f64 x x) -1))
(exp.f64 (fma.f64 x x -1))

eval23.0ms (0.8%)

Compiler

Compiled 465 to 314 computations (32.5% saved)

prune15.0ms (0.5%)

Pruning

6 alts after pruning (2 fresh and 4 done)

PrunedKeptTotal
New42244
Fresh000
Picked011
Done134
Total43649
Error
0.0b
Counts
49 → 6
Alt Table
Click to see full alt table
StatusErrorProgram
0.1b
(+.f64 1 (expm1.f64 (+.f64 -1 (*.f64 x x))))
0.1b
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
0.0b
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
0.9b
(exp.f64 -1)
0.1b
(exp.f64 (+.f64 -1 (*.f64 x x)))
0.0b
(*.f64 (*.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) x)) 2) (cbrt.f64 (pow.f64 (exp.f64 x) x))) (exp.f64 -1))
Compiler

Compiled 52 to 37 computations (28.8% saved)

localize16.0ms (0.5%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.1b
(exp.f64 (+.f64 -1 (*.f64 x x)))
Compiler

Compiled 17 to 8 computations (52.9% saved)

localize37.0ms (1.2%)

Local error

Found 4 expressions with local error:

NewErrorProgram
0.0b
(*.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) x)) 2) (cbrt.f64 (pow.f64 (exp.f64 x) x)))
0.0b
(cbrt.f64 (pow.f64 (exp.f64 x) x))
0.0b
(pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) x)) 2)
0.0b
(pow.f64 (exp.f64 x) x)
Compiler

Compiled 53 to 19 computations (64.2% saved)

series16.0ms (0.5%)

Counts
3 → 36
Calls

9 calls:

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

rewrite102.0ms (3.4%)

Algorithm
batch-egg-rewrite
Rules
563×pow1_binary64
527×add-log-exp_binary64
526×log1p-expm1-u_binary64
526×expm1-log1p-u_binary64
511×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify150.0ms (5%)

Algorithm
egg-herbie
Rules
585×distribute-rgt-out_binary64
575×fma-def_binary64
422×associate-*l*_binary64
390×distribute-lft-out_binary64
344×associate-*r*_binary64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
046349
1114339
2269331
3778329
42903329
54937329
66449329
Stop Event
node limit
Counts
90 → 78
Calls
Call 1
Inputs
1
(+.f64 (*.f64 2/3 (pow.f64 x 2)) 1)
(+.f64 (*.f64 2/3 (pow.f64 x 2)) (+.f64 1 (*.f64 2/9 (pow.f64 x 4))))
(+.f64 (*.f64 2/3 (pow.f64 x 2)) (+.f64 1 (+.f64 (*.f64 4/81 (pow.f64 x 6)) (*.f64 2/9 (pow.f64 x 4)))))
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
1
(+.f64 1 (*.f64 1/3 (pow.f64 x 2)))
(+.f64 1 (+.f64 (*.f64 1/18 (pow.f64 x 4)) (*.f64 1/3 (pow.f64 x 2))))
(+.f64 1 (+.f64 (*.f64 1/18 (pow.f64 x 4)) (+.f64 (*.f64 1/3 (pow.f64 x 2)) (*.f64 1/162 (pow.f64 x 6)))))
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
1
(+.f64 1 (pow.f64 x 2))
(+.f64 1 (+.f64 (pow.f64 x 2) (*.f64 1/2 (pow.f64 x 4))))
(+.f64 1 (+.f64 (*.f64 1/6 (pow.f64 x 6)) (+.f64 (pow.f64 x 2) (*.f64 1/2 (pow.f64 x 4)))))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
(exp.f64 (pow.f64 x 2))
Outputs
1
(+.f64 (*.f64 2/3 (pow.f64 x 2)) 1)
(fma.f64 2/3 (*.f64 x x) 1)
(+.f64 (*.f64 2/3 (pow.f64 x 2)) (+.f64 1 (*.f64 2/9 (pow.f64 x 4))))
(fma.f64 2/3 (*.f64 x x) (+.f64 1 (*.f64 2/9 (pow.f64 x 4))))
(fma.f64 2/3 (*.f64 x x) (fma.f64 2/9 (pow.f64 x 4) 1))
(+.f64 (*.f64 2/3 (pow.f64 x 2)) (+.f64 1 (+.f64 (*.f64 4/81 (pow.f64 x 6)) (*.f64 2/9 (pow.f64 x 4)))))
(+.f64 (fma.f64 2/3 (*.f64 x x) 1) (fma.f64 4/81 (pow.f64 x 6) (*.f64 2/9 (pow.f64 x 4))))
(+.f64 (fma.f64 2/3 (*.f64 x x) 1) (fma.f64 2/9 (pow.f64 x 4) (*.f64 4/81 (pow.f64 x 6))))
(fma.f64 2/3 (*.f64 x x) (fma.f64 2/9 (pow.f64 x 4) (fma.f64 4/81 (pow.f64 x 6) 1)))
(fma.f64 2/9 (pow.f64 x 4) (fma.f64 4/81 (pow.f64 x 6) (fma.f64 2/3 (*.f64 x x) 1)))
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(cbrt.f64 (pow.f64 (exp.f64 (*.f64 x x)) 2))
(cbrt.f64 (pow.f64 (pow.f64 (exp.f64 x) x) 2))
(cbrt.f64 (pow.f64 (exp.f64 x) (+.f64 x x)))
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(cbrt.f64 (pow.f64 (exp.f64 (*.f64 x x)) 2))
(cbrt.f64 (pow.f64 (pow.f64 (exp.f64 x) x) 2))
(cbrt.f64 (pow.f64 (exp.f64 x) (+.f64 x x)))
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(cbrt.f64 (pow.f64 (exp.f64 (*.f64 x x)) 2))
(cbrt.f64 (pow.f64 (pow.f64 (exp.f64 x) x) 2))
(cbrt.f64 (pow.f64 (exp.f64 x) (+.f64 x x)))
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(cbrt.f64 (pow.f64 (exp.f64 (*.f64 x x)) 2))
(cbrt.f64 (pow.f64 (pow.f64 (exp.f64 x) x) 2))
(cbrt.f64 (pow.f64 (exp.f64 x) (+.f64 x x)))
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(cbrt.f64 (pow.f64 (exp.f64 (*.f64 x x)) 2))
(cbrt.f64 (pow.f64 (pow.f64 (exp.f64 x) x) 2))
(cbrt.f64 (pow.f64 (exp.f64 x) (+.f64 x x)))
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(cbrt.f64 (pow.f64 (exp.f64 (*.f64 x x)) 2))
(cbrt.f64 (pow.f64 (pow.f64 (exp.f64 x) x) 2))
(cbrt.f64 (pow.f64 (exp.f64 x) (+.f64 x x)))
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(cbrt.f64 (pow.f64 (exp.f64 (*.f64 x x)) 2))
(cbrt.f64 (pow.f64 (pow.f64 (exp.f64 x) x) 2))
(cbrt.f64 (pow.f64 (exp.f64 x) (+.f64 x x)))
(pow.f64 (pow.f64 (exp.f64 (pow.f64 x 2)) 2) 1/3)
(cbrt.f64 (pow.f64 (exp.f64 (*.f64 x x)) 2))
(cbrt.f64 (pow.f64 (pow.f64 (exp.f64 x) x) 2))
(cbrt.f64 (pow.f64 (exp.f64 x) (+.f64 x x)))
1
(+.f64 1 (*.f64 1/3 (pow.f64 x 2)))
(+.f64 1 (*.f64 (*.f64 x x) 1/3))
(fma.f64 (*.f64 x x) 1/3 1)
(fma.f64 x (*.f64 x 1/3) 1)
(+.f64 1 (+.f64 (*.f64 1/18 (pow.f64 x 4)) (*.f64 1/3 (pow.f64 x 2))))
(+.f64 1 (fma.f64 1/18 (pow.f64 x 4) (*.f64 (*.f64 x x) 1/3)))
(+.f64 1 (fma.f64 (*.f64 x x) 1/3 (*.f64 (pow.f64 x 4) 1/18)))
(fma.f64 x (*.f64 x 1/3) (fma.f64 (pow.f64 x 4) 1/18 1))
(fma.f64 (pow.f64 x 4) 1/18 (fma.f64 x (*.f64 x 1/3) 1))
(fma.f64 (*.f64 x x) (fma.f64 (*.f64 x x) 1/18 1/3) 1)
(+.f64 1 (+.f64 (*.f64 1/18 (pow.f64 x 4)) (+.f64 (*.f64 1/3 (pow.f64 x 2)) (*.f64 1/162 (pow.f64 x 6)))))
(+.f64 1 (fma.f64 1/18 (pow.f64 x 4) (fma.f64 1/3 (*.f64 x x) (*.f64 (pow.f64 x 6) 1/162))))
(+.f64 1 (fma.f64 (pow.f64 x 4) 1/18 (fma.f64 (*.f64 x x) 1/3 (*.f64 (pow.f64 x 6) 1/162))))
(+.f64 1 (fma.f64 (pow.f64 x 6) 1/162 (fma.f64 x (*.f64 x 1/3) (*.f64 (pow.f64 x 4) 1/18))))
(fma.f64 x (*.f64 x 1/3) (fma.f64 (pow.f64 x 4) 1/18 (fma.f64 (pow.f64 x 6) 1/162 1)))
(fma.f64 (pow.f64 x 4) 1/18 (fma.f64 (pow.f64 x 6) 1/162 (fma.f64 x (*.f64 x 1/3) 1)))
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(cbrt.f64 (exp.f64 (*.f64 x x)))
(cbrt.f64 (pow.f64 (exp.f64 x) x))
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(cbrt.f64 (exp.f64 (*.f64 x x)))
(cbrt.f64 (pow.f64 (exp.f64 x) x))
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(cbrt.f64 (exp.f64 (*.f64 x x)))
(cbrt.f64 (pow.f64 (exp.f64 x) x))
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(cbrt.f64 (exp.f64 (*.f64 x x)))
(cbrt.f64 (pow.f64 (exp.f64 x) x))
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(cbrt.f64 (exp.f64 (*.f64 x x)))
(cbrt.f64 (pow.f64 (exp.f64 x) x))
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(cbrt.f64 (exp.f64 (*.f64 x x)))
(cbrt.f64 (pow.f64 (exp.f64 x) x))
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(cbrt.f64 (exp.f64 (*.f64 x x)))
(cbrt.f64 (pow.f64 (exp.f64 x) x))
(pow.f64 (exp.f64 (pow.f64 x 2)) 1/3)
(cbrt.f64 (exp.f64 (*.f64 x x)))
(cbrt.f64 (pow.f64 (exp.f64 x) x))
1
(+.f64 1 (pow.f64 x 2))
(+.f64 1 (*.f64 x x))
(fma.f64 x x 1)
(+.f64 1 (+.f64 (pow.f64 x 2) (*.f64 1/2 (pow.f64 x 4))))
(+.f64 1 (+.f64 (*.f64 x x) (*.f64 (pow.f64 x 4) 1/2)))
(+.f64 1 (fma.f64 x x (*.f64 (pow.f64 x 4) 1/2)))
(fma.f64 x x (fma.f64 (pow.f64 x 4) 1/2 1))
(fma.f64 (pow.f64 x 4) 1/2 (fma.f64 x x 1))
(+.f64 1 (+.f64 (*.f64 1/6 (pow.f64 x 6)) (+.f64 (pow.f64 x 2) (*.f64 1/2 (pow.f64 x 4)))))
(+.f64 1 (fma.f64 1/6 (pow.f64 x 6) (+.f64 (*.f64 x x) (*.f64 (pow.f64 x 4) 1/2))))
(+.f64 1 (fma.f64 (pow.f64 x 6) 1/6 (fma.f64 x x (*.f64 (pow.f64 x 4) 1/2))))
(fma.f64 (pow.f64 x 6) 1/6 (fma.f64 x x (fma.f64 (pow.f64 x 4) 1/2 1)))
(fma.f64 x x (fma.f64 (pow.f64 x 4) 1/2 (fma.f64 (pow.f64 x 6) 1/6 1)))
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)
(exp.f64 (pow.f64 x 2))
(exp.f64 (*.f64 x x))
(pow.f64 (exp.f64 x) x)

eval129.0ms (4.3%)

Compiler

Compiled 2923 to 1495 computations (48.9% saved)

prune21.0ms (0.7%)

Pruning

8 alts after pruning (3 fresh and 5 done)

PrunedKeptTotal
New1533156
Fresh000
Picked101
Done055
Total1548162
Error
0.0b
Counts
162 → 8
Alt Table
Click to see full alt table
StatusErrorProgram
0.1b
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
0.0b
(*.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) x)) 3) (exp.f64 -1))
0.1b
(+.f64 1 (expm1.f64 (+.f64 -1 (*.f64 x x))))
0.0b
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
0.0b
(*.f64 (*.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) x)) 2) (cbrt.f64 (*.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) x)) 2) (cbrt.f64 (pow.f64 (exp.f64 x) x))))) (exp.f64 -1))
0.9b
(exp.f64 -1)
0.1b
(exp.f64 (+.f64 -1 (*.f64 x x)))
0.0b
(*.f64 (pow.f64 (pow.f64 (exp.f64 x) 2) (*.f64 x 1/2)) (exp.f64 -1))
Compiler

Compiled 84 to 60 computations (28.6% saved)

regimes72.0ms (2.4%)

Counts
11 → 1
Calls
Call 1
Inputs
(exp.f64 -1)
(exp.f64 (+.f64 -1 (*.f64 x x)))
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
(+.f64 1 (expm1.f64 (+.f64 -1 (*.f64 x x))))
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
(expm1.f64 (log1p.f64 (exp.f64 (+.f64 -1 (*.f64 x x)))))
(*.f64 (pow.f64 (pow.f64 (exp.f64 x) 2) (*.f64 x 1/2)) (exp.f64 -1))
(*.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) x)) 3) (exp.f64 -1))
(*.f64 (*.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) x)) 2) (cbrt.f64 (pow.f64 (exp.f64 x) x))) (exp.f64 -1))
(*.f64 (*.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) x)) 2) (cbrt.f64 (*.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 x) x)) 2) (cbrt.f64 (pow.f64 (exp.f64 x) x))))) (exp.f64 -1))
Outputs
(*.f64 (pow.f64 (pow.f64 (exp.f64 x) 2) (*.f64 x 1/2)) (exp.f64 -1))
Calls

9 calls:

46.0ms
(-.f64 1 (*.f64 x x))
7.0ms
x
3.0ms
(*.f64 x x)
3.0ms
(*.f64 x x)
2.0ms
(-.f64 1 (*.f64 x x))
Results
ErrorSegmentsBranch
0.0b1x
0.0b1(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
0.0b1(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
0.0b1(neg.f64 (-.f64 1 (*.f64 x x)))
0.0b1(neg.f64 (-.f64 1 (*.f64 x x)))
0.0b1(-.f64 1 (*.f64 x x))
0.0b1(-.f64 1 (*.f64 x x))
0.0b1(*.f64 x x)
0.0b1(*.f64 x x)
Compiler

Compiled 160 to 95 computations (40.6% saved)

regimes26.0ms (0.9%)

Counts
7 → 1
Calls
Call 1
Inputs
(exp.f64 -1)
(exp.f64 (+.f64 -1 (*.f64 x x)))
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
(+.f64 1 (expm1.f64 (+.f64 -1 (*.f64 x x))))
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
(expm1.f64 (log1p.f64 (exp.f64 (+.f64 -1 (*.f64 x x)))))
Outputs
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
Calls

9 calls:

5.0ms
x
4.0ms
(neg.f64 (-.f64 1 (*.f64 x x)))
3.0ms
(*.f64 x x)
2.0ms
(*.f64 x x)
2.0ms
(-.f64 1 (*.f64 x x))
Results
ErrorSegmentsBranch
0.0b1x
0.0b1(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
0.0b1(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
0.0b1(neg.f64 (-.f64 1 (*.f64 x x)))
0.0b1(neg.f64 (-.f64 1 (*.f64 x x)))
0.0b1(-.f64 1 (*.f64 x x))
0.0b1(-.f64 1 (*.f64 x x))
0.0b1(*.f64 x x)
0.0b1(*.f64 x x)
Compiler

Compiled 98 to 65 computations (33.7% saved)

regimes83.0ms (2.8%)

Counts
5 → 1
Calls
Call 1
Inputs
(exp.f64 -1)
(exp.f64 (+.f64 -1 (*.f64 x x)))
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
(+.f64 1 (expm1.f64 (+.f64 -1 (*.f64 x x))))
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
Outputs
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
Calls

8 calls:

65.0ms
(-.f64 1 (*.f64 x x))
4.0ms
x
2.0ms
(*.f64 x x)
2.0ms
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
2.0ms
(neg.f64 (-.f64 1 (*.f64 x x)))
Results
ErrorSegmentsBranch
0.1b1x
0.1b1(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
0.1b1(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
0.1b1(neg.f64 (-.f64 1 (*.f64 x x)))
0.1b1(neg.f64 (-.f64 1 (*.f64 x x)))
0.1b1(-.f64 1 (*.f64 x x))
0.1b1(-.f64 1 (*.f64 x x))
0.1b1(*.f64 x x)
Compiler

Compiled 79 to 53 computations (32.9% saved)

regimes20.0ms (0.7%)

Accuracy

Total -0.8b remaining (-1237%)

Threshold costs -0.8b (-1237%)

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

8 calls:

4.0ms
x
3.0ms
(-.f64 1 (*.f64 x x))
2.0ms
(*.f64 x x)
2.0ms
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
2.0ms
(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
Results
ErrorSegmentsBranch
0.1b1x
0.1b1(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
0.1b1(exp.f64 (neg.f64 (-.f64 1 (*.f64 x x))))
0.1b1(neg.f64 (-.f64 1 (*.f64 x x)))
0.1b1(neg.f64 (-.f64 1 (*.f64 x x)))
0.1b1(-.f64 1 (*.f64 x x))
0.1b1(-.f64 1 (*.f64 x x))
0.1b1(*.f64 x x)
Compiler

Compiled 72 to 49 computations (31.9% saved)

simplify4.0ms (0.1%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
+-commutative_binary64
1-exp_binary64
e-exp-1_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01851
12451
22651
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(*.f64 (pow.f64 (pow.f64 (exp.f64 x) 2) (*.f64 x 1/2)) (exp.f64 -1))
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
(exp.f64 (+.f64 -1 (*.f64 x x)))
(exp.f64 -1)
Outputs
(*.f64 (pow.f64 (pow.f64 (exp.f64 x) 2) (*.f64 x 1/2)) (exp.f64 -1))
(*.f64 (pow.f64 (exp.f64 x) x) (exp.f64 -1))
(*.f64 (exp.f64 -1) (pow.f64 (exp.f64 x) x))
(pow.f64 (E.f64) (+.f64 -1 (*.f64 x x)))
(exp.f64 (+.f64 -1 (*.f64 x x)))
(exp.f64 -1)
Compiler

Compiled 38 to 30 computations (21.1% saved)

soundness0.0ms (0%)

end38.0ms (1.2%)

Compiler

Compiled 34 to 24 computations (29.4% saved)

Profiling

Loading profile data...