Details

Time bar (total: 2.3s)

analyze5.0ms (0.2%)

Algorithm
search
Search
TrueOtherFalseIter
0%100%0%0
0%100%0%1
0%100%0%2
25%75%0%3
62.5%37.5%0%4
68.7%18.7%12.5%5
71.8%9.4%18.8%6
73.4%4.7%21.9%7
74.2%2.3%23.5%8
74.6%1.2%24.3%9
75%0.6%24.5%10
75.1%0.3%24.6%11
75.1%0.1%24.7%12
75.1%0.1%24.8%13
75.2%0%24.8%14
Compiler

Compiled 8 to 6 computations (25% saved)

sample1.7s (73.2%)

Results
921.0ms2773×body1024valid
302.0ms1342×body512valid
271.0ms3213×body128valid
104.0ms261×body2048valid
102.0ms667×body256valid
0.0msbody128invalid

preprocess27.0ms (1.1%)

Algorithm
egg-herbie
Rules
303×rule-+a-bc-+b-ac_binary64
296×rule-*a-bc-*nega-cb_binary64
259×rule-*b-ac--*ab*bc_binary64
252×rule-/a-bc-/nega-cb_binary64
206×rule-/-abc--/ac/bc_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
066
1456
21836
310036
011
Stop Event
saturated
node limit
Calls
Call 1
Inputs
0
Outputs
0
Call 2
Inputs
(/.f64 (-.f64 (exp.f64 x) 1) x)
Outputs
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
Compiler

Compiled 7 to 5 computations (28.6% saved)

simplify33.0ms (1.4%)

Algorithm
egg-herbie
Rules
303×rule-+a-bc-+b-ac_binary64
296×rule-*a-bc-*nega-cb_binary64
259×rule-*b-ac--*ab*bc_binary64
252×rule-/a-bc-/nega-cb_binary64
206×rule-/-abc--/ac/bc_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
066
1456
21836
310036
Stop Event
node limit
Counts
1 → 2
Calls
Call 1
Inputs
(/.f64 (-.f64 (exp.f64 x) 1) x)
Outputs
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)

prune2.0ms (0.1%)

Pruning

1 alts after pruning (1 fresh and 0 done)

PrunedKeptTotal
New112
Fresh101
Picked000
Done000
Total213
Error
0.0b
Counts
3 → 1
Alt Table
StatusErrorProgram
0.0b
(/.f64 (expm1.f64 x) x)
Compiler

Compiled 21 to 13 computations (38.1% saved)

localize2.0ms (0.1%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(/.f64 (expm1.f64 x) x)

series2.0ms (0.1%)

Counts
1 → 12
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@-inf
(/.f64 (expm1.f64 x) x)
1.0ms
x
@inf
(/.f64 (expm1.f64 x) x)
1.0ms
x
@0
(/.f64 (expm1.f64 x) x)

rewrite32.0ms (1.4%)

Algorithm
batch-egg-rewrite
Rules
485×rules-30_binary64
485×rules-31_binary64
485×rules-32_binary64
485×rules-33_binary64
453×log1p-expm1-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify39.0ms (1.7%)

Algorithm
egg-herbie
Rules
483×rule-a-*a1_binary64
483×rule-a--a0_binary64
483×rule-a-+a0_binary64
479×rule-a-/a1_binary64
441×rule--ab--+aa+ab_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
02287
115685
249985
3251185
Stop Event
node limit
Counts
51 → 48
Calls
Call 1
Inputs
1
(+.f64 (*.f64 1/2 x) 1)
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) 1))
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) (+.f64 1 (*.f64 1/24 (pow.f64 x 3)))))
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
Outputs
1
(+.f64 (*.f64 1/2 x) 1)
(fma.f64 1/2 x 1)
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) 1))
(fma.f64 1/2 x (fma.f64 1/6 (*.f64 x x) 1))
(fma.f64 1/2 x (fma.f64 x (*.f64 x 1/6) 1))
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) (+.f64 1 (*.f64 1/24 (pow.f64 x 3)))))
(fma.f64 1/2 x (fma.f64 1/6 (*.f64 x x) (+.f64 1 (*.f64 1/24 (pow.f64 x 3)))))
(fma.f64 1/2 x (fma.f64 1/6 (*.f64 x x) (fma.f64 1/24 (pow.f64 x 3) 1)))
(fma.f64 1/2 x (fma.f64 x (*.f64 x 1/6) (fma.f64 1/24 (pow.f64 x 3) 1)))
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)

prune45.0ms (1.9%)

Pruning

3 alts after pruning (2 fresh and 1 done)

PrunedKeptTotal
New46248
Fresh000
Picked011
Done000
Total46349
Error
0b
Counts
49 → 3
Alt Table
StatusErrorProgram
18.6b
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))
0.2b
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
0.0b
(/.f64 (expm1.f64 x) x)
Compiler

Compiled 426 to 186 computations (56.3% saved)

localize5.0ms (0.2%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.0b
(/.f64 (expm1.f64 x) x)
0.1b
(sqrt.f64 (/.f64 (expm1.f64 x) x))
0.2b
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)

series7.0ms (0.3%)

Counts
2 → 8
Calls

6 calls:

TimeVariablePointExpression
2.0ms
x
@inf
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
1.0ms
x
@-inf
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
1.0ms
x
@inf
(sqrt.f64 (/.f64 (expm1.f64 x) x))
1.0ms
x
@-inf
(sqrt.f64 (/.f64 (expm1.f64 x) x))
1.0ms
x
@0
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)

rewrite43.0ms (1.8%)

Algorithm
batch-egg-rewrite
Rules
665×rules-30_binary64
665×rules-31_binary64
665×rules-32_binary64
665×rules-33_binary64
611×rules-27_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify28.0ms (1.2%)

Algorithm
egg-herbie
Rules
471×rule-a-*a1_binary64
471×rule-a--a0_binary64
471×rule-a-+a0_binary64
471×rule-a-/a1_binary64
427×rule--ab--+aa+ab_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
03182
120778
258174
3265974
Stop Event
node limit
Counts
104 → 109
Calls
Call 1
Inputs
1
(+.f64 (*.f64 1/2 x) 1)
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) 1))
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) (+.f64 1 (*.f64 1/24 (pow.f64 x 3)))))
1
(+.f64 1 (*.f64 1/4 x))
(+.f64 1 (+.f64 (*.f64 1/4 x) (*.f64 5/96 (pow.f64 x 2))))
(+.f64 1 (+.f64 (*.f64 1/4 x) (+.f64 (*.f64 1/128 (pow.f64 x 3)) (*.f64 5/96 (pow.f64 x 2)))))
Outputs
1
(+.f64 (*.f64 1/2 x) 1)
(fma.f64 1/2 x 1)
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) 1))
(fma.f64 1/2 x (fma.f64 1/6 (*.f64 x x) 1))
(fma.f64 1/2 x (fma.f64 x (*.f64 x 1/6) 1))
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) (+.f64 1 (*.f64 1/24 (pow.f64 x 3)))))
(fma.f64 1/2 x (fma.f64 1/6 (*.f64 x x) (+.f64 1 (*.f64 1/24 (pow.f64 x 3)))))
(fma.f64 1/2 x (fma.f64 1/6 (*.f64 x x) (fma.f64 1/24 (pow.f64 x 3) 1)))
(fma.f64 1/2 x (fma.f64 x (*.f64 x 1/6) (fma.f64 1/24 (pow.f64 x 3) 1)))
1
(+.f64 1 (*.f64 1/4 x))
(+.f64 1 (*.f64 x 1/4))
(fma.f64 x 1/4 1)
(+.f64 1 (+.f64 (*.f64 1/4 x) (*.f64 5/96 (pow.f64 x 2))))
(+.f64 1 (fma.f64 1/4 x (*.f64 (*.f64 x x) 5/96)))
(+.f64 (*.f64 x (*.f64 5/96 x)) (fma.f64 x 1/4 1))
(fma.f64 x 1/4 (fma.f64 (*.f64 x x) 5/96 1))
(+.f64 1 (+.f64 (*.f64 1/4 x) (+.f64 (*.f64 1/128 (pow.f64 x 3)) (*.f64 5/96 (pow.f64 x 2)))))
(+.f64 1 (fma.f64 1/4 x (fma.f64 1/128 (pow.f64 x 3) (*.f64 (*.f64 x x) 5/96))))
(+.f64 (fma.f64 (*.f64 x x) 5/96 (*.f64 (pow.f64 x 3) 1/128)) (fma.f64 x 1/4 1))
(fma.f64 x 1/4 (fma.f64 (pow.f64 x 3) 1/128 (fma.f64 (*.f64 x x) 5/96 1)))

prune112.0ms (4.8%)

Pruning

3 alts after pruning (1 fresh and 2 done)

PrunedKeptTotal
New1570157
Fresh011
Picked011
Done011
Total1573160
Error
0b
Counts
160 → 3
Alt Table
StatusErrorProgram
18.6b
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))
0.2b
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
0.0b
(/.f64 (expm1.f64 x) x)
Compiler

Compiled 1706 to 782 computations (54.2% saved)

localize5.0ms (0.2%)

Local error

Found 3 expressions with local error:

NewErrorProgram
0.0b
(/.f64 (expm1.f64 x) x)
0.0b
(exp.f64 (/.f64 (expm1.f64 x) x))
2.5b
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))

series3.0ms (0.1%)

Counts
2 → 24
Calls

6 calls:

TimeVariablePointExpression
1.0ms
x
@inf
(exp.f64 (/.f64 (expm1.f64 x) x))
0.0ms
x
@-inf
(exp.f64 (/.f64 (expm1.f64 x) x))
0.0ms
x
@0
(exp.f64 (/.f64 (expm1.f64 x) x))
0.0ms
x
@0
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))
0.0ms
x
@-inf
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))

rewrite72.0ms (3.1%)

Algorithm
batch-egg-rewrite
Rules
574×rules-30_binary64
574×rules-31_binary64
574×rules-32_binary64
574×rules-33_binary64
534×expm1-log1p-u_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify26.0ms (1.1%)

Algorithm
egg-herbie
Rules
297×rule-*a-bc-*nega-cb_binary64
267×rule-a-*a1_binary64
267×rule-a--a0_binary64
267×rule-a-+a0_binary64
260×rule-a-/a1_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
051342
1376296
21492293
Stop Event
node limit
Counts
110 → 108
Calls
Call 1
Inputs
1
(+.f64 (*.f64 1/2 x) 1)
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) 1))
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) (+.f64 1 (*.f64 1/24 (pow.f64 x 3)))))
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(exp.f64 1)
(+.f64 (*.f64 1/2 (*.f64 (exp.f64 1) x)) (exp.f64 1))
(+.f64 (*.f64 1/2 (*.f64 (exp.f64 1) x)) (+.f64 (*.f64 7/24 (*.f64 (exp.f64 1) (pow.f64 x 2))) (exp.f64 1)))
(+.f64 (*.f64 7/48 (*.f64 (exp.f64 1) (pow.f64 x 3))) (+.f64 (*.f64 1/2 (*.f64 (exp.f64 1) x)) (+.f64 (*.f64 7/24 (*.f64 (exp.f64 1) (pow.f64 x 2))) (exp.f64 1))))
1
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) 1) (/.f64 1 x))
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) (+.f64 1 (*.f64 1/2 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 2) (pow.f64 x 2))))) (/.f64 1 x))
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) (+.f64 (*.f64 1/6 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 3) (pow.f64 x 3))) (+.f64 1 (*.f64 1/2 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 2) (pow.f64 x 2)))))) (/.f64 1 x))
1
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) 1) (/.f64 1 x))
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) (+.f64 1 (*.f64 1/2 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 2) (pow.f64 x 2))))) (/.f64 1 x))
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) (+.f64 (*.f64 1/6 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 3) (pow.f64 x 3))) (+.f64 1 (*.f64 1/2 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 2) (pow.f64 x 2)))))) (/.f64 1 x))
Outputs
1
(+.f64 (*.f64 1/2 x) 1)
(fma.f64 1/2 x 1)
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) 1))
(fma.f64 1/2 x (fma.f64 1/6 (*.f64 x x) 1))
(+.f64 (*.f64 1/2 x) (+.f64 (*.f64 1/6 (pow.f64 x 2)) (+.f64 1 (*.f64 1/24 (pow.f64 x 3)))))
(fma.f64 1/2 x (fma.f64 1/6 (*.f64 x x) (+.f64 1 (*.f64 1/24 (pow.f64 x 3)))))
(fma.f64 1/2 x (fma.f64 1/6 (*.f64 x x) (fma.f64 1/24 (pow.f64 x 3) 1)))
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(exp.f64 1)
(E.f64)
(+.f64 (*.f64 1/2 (*.f64 (exp.f64 1) x)) (exp.f64 1))
(fma.f64 1/2 (*.f64 x (E.f64)) (E.f64))
(fma.f64 (E.f64) (*.f64 1/2 x) (E.f64))
(*.f64 (E.f64) (fma.f64 1/2 x 1))
(+.f64 (*.f64 1/2 (*.f64 (exp.f64 1) x)) (+.f64 (*.f64 7/24 (*.f64 (exp.f64 1) (pow.f64 x 2))) (exp.f64 1)))
(fma.f64 1/2 (*.f64 x (E.f64)) (fma.f64 7/24 (*.f64 (*.f64 x x) (E.f64)) (E.f64)))
(fma.f64 (E.f64) (*.f64 (*.f64 x x) 7/24) (fma.f64 (E.f64) (*.f64 1/2 x) (E.f64)))
(fma.f64 (E.f64) (*.f64 x (*.f64 x 7/24)) (*.f64 (E.f64) (fma.f64 1/2 x 1)))
(+.f64 (*.f64 7/48 (*.f64 (exp.f64 1) (pow.f64 x 3))) (+.f64 (*.f64 1/2 (*.f64 (exp.f64 1) x)) (+.f64 (*.f64 7/24 (*.f64 (exp.f64 1) (pow.f64 x 2))) (exp.f64 1))))
(fma.f64 7/48 (*.f64 (pow.f64 x 3) (E.f64)) (fma.f64 1/2 (*.f64 x (E.f64)) (fma.f64 7/24 (*.f64 (*.f64 x x) (E.f64)) (E.f64))))
(fma.f64 (E.f64) (*.f64 (pow.f64 x 3) 7/48) (fma.f64 (E.f64) (*.f64 (*.f64 x x) 7/24) (fma.f64 (E.f64) (*.f64 1/2 x) (E.f64))))
(fma.f64 (E.f64) (*.f64 (pow.f64 x 3) 7/48) (fma.f64 (E.f64) (*.f64 x (*.f64 x 7/24)) (*.f64 (E.f64) (fma.f64 1/2 x 1))))
1
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) 1) (/.f64 1 x))
(+.f64 (/.f64 (exp.f64 x) x) (-.f64 1 (/.f64 1 x)))
(+.f64 1 (/.f64 (expm1.f64 x) x))
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) (+.f64 1 (*.f64 1/2 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 2) (pow.f64 x 2))))) (/.f64 1 x))
(-.f64 (+.f64 1 (+.f64 (/.f64 (exp.f64 x) x) (*.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x))))) (/.f64 1 x))
(+.f64 (fma.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x)) 1) (/.f64 (expm1.f64 x) x))
(+.f64 (/.f64 (expm1.f64 x) x) (fma.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x)) 1))
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) (+.f64 (*.f64 1/6 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 3) (pow.f64 x 3))) (+.f64 1 (*.f64 1/2 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 2) (pow.f64 x 2)))))) (/.f64 1 x))
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) (fma.f64 1/6 (/.f64 (pow.f64 (expm1.f64 x) 3) (pow.f64 x 3)) (+.f64 1 (*.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x)))))) (/.f64 1 x))
(+.f64 (fma.f64 1/6 (/.f64 (pow.f64 (expm1.f64 x) 3) (pow.f64 x 3)) (fma.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x)) 1)) (/.f64 (expm1.f64 x) x))
(+.f64 (/.f64 (expm1.f64 x) x) (fma.f64 1/6 (/.f64 (pow.f64 (expm1.f64 x) 3) (pow.f64 x 3)) (fma.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x)) 1)))
1
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) 1) (/.f64 1 x))
(+.f64 (/.f64 (exp.f64 x) x) (-.f64 1 (/.f64 1 x)))
(+.f64 1 (/.f64 (expm1.f64 x) x))
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) (+.f64 1 (*.f64 1/2 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 2) (pow.f64 x 2))))) (/.f64 1 x))
(-.f64 (+.f64 1 (+.f64 (/.f64 (exp.f64 x) x) (*.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x))))) (/.f64 1 x))
(+.f64 (fma.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x)) 1) (/.f64 (expm1.f64 x) x))
(+.f64 (/.f64 (expm1.f64 x) x) (fma.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x)) 1))
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) (+.f64 (*.f64 1/6 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 3) (pow.f64 x 3))) (+.f64 1 (*.f64 1/2 (/.f64 (pow.f64 (-.f64 (exp.f64 x) 1) 2) (pow.f64 x 2)))))) (/.f64 1 x))
(-.f64 (+.f64 (/.f64 (exp.f64 x) x) (fma.f64 1/6 (/.f64 (pow.f64 (expm1.f64 x) 3) (pow.f64 x 3)) (+.f64 1 (*.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x)))))) (/.f64 1 x))
(+.f64 (fma.f64 1/6 (/.f64 (pow.f64 (expm1.f64 x) 3) (pow.f64 x 3)) (fma.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x)) 1)) (/.f64 (expm1.f64 x) x))
(+.f64 (/.f64 (expm1.f64 x) x) (fma.f64 1/6 (/.f64 (pow.f64 (expm1.f64 x) 3) (pow.f64 x 3)) (fma.f64 1/2 (/.f64 (pow.f64 (expm1.f64 x) 2) (*.f64 x x)) 1)))

prune93.0ms (4%)

Pruning

3 alts after pruning (0 fresh and 3 done)

PrunedKeptTotal
New1560156
Fresh000
Picked011
Done022
Total1563159
Error
0b
Counts
159 → 3
Alt Table
StatusErrorProgram
18.6b
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))
0.2b
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
0.0b
(/.f64 (expm1.f64 x) x)
Compiler

Compiled 1654 to 748 computations (54.8% saved)

regimes15.0ms (0.6%)

Accuracy

Total -20.2b remaining (-207462.2%)

Threshold costs -20.2b (-207462.2%)

Counts
11 → 1
Compiler

Compiled 74 to 45 computations (39.2% saved)

simplify1.0ms (0%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
046
Stop Event
saturated
Calls
Call 1
Inputs
(/.f64 (expm1.f64 x) x)
Outputs
(/.f64 (expm1.f64 x) x)

end31.0ms (1.3%)

Stop Event
done
Compiler

Compiled 27 to 11 computations (59.3% saved)

Profiling

Loading profile data...