Kahan's exp quotient

Time bar (total: 2.2s)

analyze1.0ms (0.1%)

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

Compiled 8 to 6 computations (25% saved)

sample1.2s (54.3%)

Results
464.0ms2140×body1024valid
308.0ms2913×body256valid
171.0ms1993×body256infinite
148.0ms1011×body512valid
101.0ms199×body2048valid
Bogosity

preprocess56.0ms (2.5%)

Algorithm
egg-herbie
Rules
1290×div-sub
1216×fma-neg
1162×fma-def
906×cancel-sign-sub-inv
870×associate-/r*
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01230
12930
24730
37930
418530
554330
6163530
7579730
Stop Event
node limit
Calls
Call 1
Inputs
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (-.f64 (exp.f64 (neg.f64 x)) 1) (neg.f64 x))
Outputs
(/.f64 (-.f64 (exp.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (-.f64 (exp.f64 (neg.f64 x)) 1) (neg.f64 x))
(/.f64 (expm1.f64 (neg.f64 x)) (neg.f64 x))
Compiler

Compiled 8 to 6 computations (25% saved)

simplify22.0ms (1%)

Algorithm
egg-herbie
Rules
336×fma-def
68×distribute-rgt-in
52×distribute-lft-in
40×sub-neg
40×associate-/r*
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0811
11711
22011
32411
43311
54311
66211
710311
814711
922511
1034711
1153111
1260311
1363911
Stop Event
saturated
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)

eval1.0ms (0%)

Compiler

Compiled 11 to 7 computations (36.4% saved)

prune1.0ms (0%)

Pruning

1 alts after pruning (1 fresh and 0 done)

PrunedKeptTotal
New112
Fresh101
Picked000
Done000
Total213
Accurracy
100.0%
Counts
3 → 1
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(/.f64 (expm1.f64 x) x)
100.0%
(/.f64 (expm1.f64 x) x)
Compiler

Compiled 10 to 6 computations (40% saved)

localize19.0ms (0.9%)

Local Accuracy

Found 2 expressions with local accuracy:

NewAccuracyProgram
100.0%
(expm1.f64 x)
100.0%
(/.f64 (expm1.f64 x) x)
Compiler

Compiled 9 to 4 computations (55.6% saved)

series2.0ms (0.1%)

Counts
2 → 24
Calls

6 calls:

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

rewrite58.0ms (2.6%)

Algorithm
batch-egg-rewrite
Rules
1246×pow1
1146×add-exp-log
1146×log1p-expm1-u
1144×expm1-log1p-u
1120×add-log-exp
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0616
112016
2153716
Stop Event
node limit
Counts
2 → 49
Calls
Call 1
Inputs
(/.f64 (expm1.f64 x) x)
(expm1.f64 x)
Outputs
(-.f64 (+.f64 1 (/.f64 (expm1.f64 x) x)) 1)
(-.f64 (/.f64 (exp.f64 x) x) (/.f64 1 x))
(*.f64 (expm1.f64 x) (/.f64 1 x))
(*.f64 (/.f64 (expm1.f64 x) x) 1)
(*.f64 1 (/.f64 (expm1.f64 x) x))
(*.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) (pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 2))
(*.f64 (pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 2) (cbrt.f64 (/.f64 (expm1.f64 x) x)))
(*.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (*.f64 (cbrt.f64 (expm1.f64 x)) (/.f64 1 x)))
(*.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) (sqrt.f64 (/.f64 (expm1.f64 x) x)))
(*.f64 (sqrt.f64 (expm1.f64 x)) (*.f64 (sqrt.f64 (expm1.f64 x)) (/.f64 1 x)))
(*.f64 (neg.f64 (expm1.f64 x)) (/.f64 1 (neg.f64 x)))
(*.f64 (/.f64 1 x) (expm1.f64 x))
(*.f64 (/.f64 1 (pow.f64 (cbrt.f64 x) 2)) (/.f64 (expm1.f64 x) (cbrt.f64 x)))
(*.f64 (/.f64 1 (sqrt.f64 x)) (/.f64 (expm1.f64 x) (sqrt.f64 x)))
(*.f64 (/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) 1) (/.f64 (cbrt.f64 (expm1.f64 x)) x))
(*.f64 (/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 (/.f64 (expm1.f64 x) x)))
(*.f64 (/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (sqrt.f64 x)) (/.f64 (cbrt.f64 (expm1.f64 x)) (sqrt.f64 x)))
(*.f64 (/.f64 (sqrt.f64 (expm1.f64 x)) 1) (/.f64 (sqrt.f64 (expm1.f64 x)) x))
(*.f64 (/.f64 (sqrt.f64 (expm1.f64 x)) (pow.f64 (cbrt.f64 x) 2)) (/.f64 (sqrt.f64 (expm1.f64 x)) (cbrt.f64 x)))
(pow.f64 (/.f64 (expm1.f64 x) x) 1)
(pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 3)
(pow.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3) 1/3)
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
(pow.f64 (/.f64 x (expm1.f64 x)) -1)
(neg.f64 (/.f64 (expm1.f64 x) (neg.f64 x)))
(sqrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 2))
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))
(cbrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3))
(expm1.f64 (log1p.f64 (/.f64 (expm1.f64 x) x)))
(exp.f64 (log.f64 (/.f64 (expm1.f64 x) x)))
(log1p.f64 (expm1.f64 (/.f64 (expm1.f64 x) x)))
(+.f64 (exp.f64 x) -1)
(-.f64 (exp.f64 x) 1)
(*.f64 (expm1.f64 x) 1)
(*.f64 1 (expm1.f64 x))
(*.f64 (cbrt.f64 (expm1.f64 x)) (pow.f64 (cbrt.f64 (expm1.f64 x)) 2))
(*.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (cbrt.f64 (expm1.f64 x)))
(*.f64 (sqrt.f64 (expm1.f64 x)) (sqrt.f64 (expm1.f64 x)))
(/.f64 (-.f64 (pow.f64 (exp.f64 x) 3) 1) (+.f64 (*.f64 (exp.f64 x) (exp.f64 x)) (+.f64 1 (*.f64 (exp.f64 x) 1))))
(/.f64 (-.f64 (*.f64 (exp.f64 x) (exp.f64 x)) 1) (+.f64 (exp.f64 x) 1))
(pow.f64 (expm1.f64 x) 1)
(pow.f64 (cbrt.f64 (expm1.f64 x)) 3)
(pow.f64 (pow.f64 (expm1.f64 x) 3) 1/3)
(pow.f64 (sqrt.f64 (expm1.f64 x)) 2)
(sqrt.f64 (pow.f64 (expm1.f64 x) 2))
(log.f64 (exp.f64 (expm1.f64 x)))
(cbrt.f64 (pow.f64 (expm1.f64 x) 3))
(exp.f64 (log.f64 (expm1.f64 x)))
(log1p.f64 (expm1.f64 (expm1.f64 x)))

simplify45.0ms (2%)

Algorithm
egg-herbie
Rules
1218×times-frac
1118×associate-/l*
972×associate-*r/
868×fma-def
778×unswap-sqr
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
0137857
1317841
21495835
Stop Event
node limit
Counts
73 → 77
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)
x
(+.f64 (*.f64 1/2 (pow.f64 x 2)) x)
(+.f64 (*.f64 1/6 (pow.f64 x 3)) (+.f64 (*.f64 1/2 (pow.f64 x 2)) x))
(+.f64 (*.f64 1/6 (pow.f64 x 3)) (+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 1/24 (pow.f64 x 4)) x)))
(-.f64 (exp.f64 x) 1)
(-.f64 (exp.f64 x) 1)
(-.f64 (exp.f64 x) 1)
(-.f64 (exp.f64 x) 1)
(-.f64 (exp.f64 x) 1)
(-.f64 (exp.f64 x) 1)
(-.f64 (exp.f64 x) 1)
(-.f64 (exp.f64 x) 1)
(-.f64 (+.f64 1 (/.f64 (expm1.f64 x) x)) 1)
(-.f64 (/.f64 (exp.f64 x) x) (/.f64 1 x))
(*.f64 (expm1.f64 x) (/.f64 1 x))
(*.f64 (/.f64 (expm1.f64 x) x) 1)
(*.f64 1 (/.f64 (expm1.f64 x) x))
(*.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) (pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 2))
(*.f64 (pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 2) (cbrt.f64 (/.f64 (expm1.f64 x) x)))
(*.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (*.f64 (cbrt.f64 (expm1.f64 x)) (/.f64 1 x)))
(*.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) (sqrt.f64 (/.f64 (expm1.f64 x) x)))
(*.f64 (sqrt.f64 (expm1.f64 x)) (*.f64 (sqrt.f64 (expm1.f64 x)) (/.f64 1 x)))
(*.f64 (neg.f64 (expm1.f64 x)) (/.f64 1 (neg.f64 x)))
(*.f64 (/.f64 1 x) (expm1.f64 x))
(*.f64 (/.f64 1 (pow.f64 (cbrt.f64 x) 2)) (/.f64 (expm1.f64 x) (cbrt.f64 x)))
(*.f64 (/.f64 1 (sqrt.f64 x)) (/.f64 (expm1.f64 x) (sqrt.f64 x)))
(*.f64 (/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) 1) (/.f64 (cbrt.f64 (expm1.f64 x)) x))
(*.f64 (/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 (/.f64 (expm1.f64 x) x)))
(*.f64 (/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (sqrt.f64 x)) (/.f64 (cbrt.f64 (expm1.f64 x)) (sqrt.f64 x)))
(*.f64 (/.f64 (sqrt.f64 (expm1.f64 x)) 1) (/.f64 (sqrt.f64 (expm1.f64 x)) x))
(*.f64 (/.f64 (sqrt.f64 (expm1.f64 x)) (pow.f64 (cbrt.f64 x) 2)) (/.f64 (sqrt.f64 (expm1.f64 x)) (cbrt.f64 x)))
(pow.f64 (/.f64 (expm1.f64 x) x) 1)
(pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 3)
(pow.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3) 1/3)
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
(pow.f64 (/.f64 x (expm1.f64 x)) -1)
(neg.f64 (/.f64 (expm1.f64 x) (neg.f64 x)))
(sqrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 2))
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))
(cbrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3))
(expm1.f64 (log1p.f64 (/.f64 (expm1.f64 x) x)))
(exp.f64 (log.f64 (/.f64 (expm1.f64 x) x)))
(log1p.f64 (expm1.f64 (/.f64 (expm1.f64 x) x)))
(+.f64 (exp.f64 x) -1)
(-.f64 (exp.f64 x) 1)
(*.f64 (expm1.f64 x) 1)
(*.f64 1 (expm1.f64 x))
(*.f64 (cbrt.f64 (expm1.f64 x)) (pow.f64 (cbrt.f64 (expm1.f64 x)) 2))
(*.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (cbrt.f64 (expm1.f64 x)))
(*.f64 (sqrt.f64 (expm1.f64 x)) (sqrt.f64 (expm1.f64 x)))
(/.f64 (-.f64 (pow.f64 (exp.f64 x) 3) 1) (+.f64 (*.f64 (exp.f64 x) (exp.f64 x)) (+.f64 1 (*.f64 (exp.f64 x) 1))))
(/.f64 (-.f64 (*.f64 (exp.f64 x) (exp.f64 x)) 1) (+.f64 (exp.f64 x) 1))
(pow.f64 (expm1.f64 x) 1)
(pow.f64 (cbrt.f64 (expm1.f64 x)) 3)
(pow.f64 (pow.f64 (expm1.f64 x) 3) 1/3)
(pow.f64 (sqrt.f64 (expm1.f64 x)) 2)
(sqrt.f64 (pow.f64 (expm1.f64 x) 2))
(log.f64 (exp.f64 (expm1.f64 x)))
(cbrt.f64 (pow.f64 (expm1.f64 x) 3))
(exp.f64 (log.f64 (expm1.f64 x)))
(log1p.f64 (expm1.f64 (expm1.f64 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 (+.f64 (fma.f64 1/6 (*.f64 x x) 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)
x
(+.f64 (*.f64 1/2 (pow.f64 x 2)) x)
(fma.f64 1/2 (*.f64 x x) x)
(*.f64 (fma.f64 1/2 x 1) x)
(+.f64 (*.f64 1/6 (pow.f64 x 3)) (+.f64 (*.f64 1/2 (pow.f64 x 2)) x))
(fma.f64 1/6 (pow.f64 x 3) (fma.f64 1/2 (*.f64 x x) x))
(fma.f64 1/2 (*.f64 x x) (fma.f64 1/6 (pow.f64 x 3) x))
(+.f64 (*.f64 1/6 (pow.f64 x 3)) (+.f64 (*.f64 1/2 (pow.f64 x 2)) (+.f64 (*.f64 1/24 (pow.f64 x 4)) x)))
(fma.f64 1/6 (pow.f64 x 3) (fma.f64 1/2 (*.f64 x x) (fma.f64 1/24 (pow.f64 x 4) x)))
(-.f64 (exp.f64 x) 1)
(expm1.f64 x)
(-.f64 (exp.f64 x) 1)
(expm1.f64 x)
(-.f64 (exp.f64 x) 1)
(expm1.f64 x)
(-.f64 (exp.f64 x) 1)
(expm1.f64 x)
(-.f64 (exp.f64 x) 1)
(expm1.f64 x)
(-.f64 (exp.f64 x) 1)
(expm1.f64 x)
(-.f64 (exp.f64 x) 1)
(expm1.f64 x)
(-.f64 (exp.f64 x) 1)
(expm1.f64 x)
(-.f64 (+.f64 1 (/.f64 (expm1.f64 x) x)) 1)
(/.f64 (expm1.f64 x) x)
(-.f64 (/.f64 (exp.f64 x) x) (/.f64 1 x))
(/.f64 (expm1.f64 x) x)
(*.f64 (expm1.f64 x) (/.f64 1 x))
(/.f64 (expm1.f64 x) x)
(*.f64 (/.f64 (expm1.f64 x) x) 1)
(/.f64 (expm1.f64 x) x)
(*.f64 1 (/.f64 (expm1.f64 x) x))
(/.f64 (expm1.f64 x) x)
(*.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) (pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 2))
(/.f64 (expm1.f64 x) x)
(*.f64 (pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 2) (cbrt.f64 (/.f64 (expm1.f64 x) x)))
(/.f64 (expm1.f64 x) x)
(*.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (*.f64 (cbrt.f64 (expm1.f64 x)) (/.f64 1 x)))
(/.f64 (expm1.f64 x) x)
(*.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) (sqrt.f64 (/.f64 (expm1.f64 x) x)))
(/.f64 (expm1.f64 x) x)
(*.f64 (sqrt.f64 (expm1.f64 x)) (*.f64 (sqrt.f64 (expm1.f64 x)) (/.f64 1 x)))
(/.f64 (expm1.f64 x) x)
(*.f64 (neg.f64 (expm1.f64 x)) (/.f64 1 (neg.f64 x)))
(/.f64 (expm1.f64 x) x)
(*.f64 (/.f64 1 x) (expm1.f64 x))
(/.f64 (expm1.f64 x) x)
(*.f64 (/.f64 1 (pow.f64 (cbrt.f64 x) 2)) (/.f64 (expm1.f64 x) (cbrt.f64 x)))
(/.f64 (/.f64 (expm1.f64 x) (cbrt.f64 x)) (pow.f64 (cbrt.f64 x) 2))
(*.f64 (/.f64 1 (sqrt.f64 x)) (/.f64 (expm1.f64 x) (sqrt.f64 x)))
(/.f64 (expm1.f64 x) x)
(*.f64 (/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) 1) (/.f64 (cbrt.f64 (expm1.f64 x)) x))
(/.f64 (expm1.f64 x) x)
(*.f64 (/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 (/.f64 (expm1.f64 x) x)))
(*.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) (/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (pow.f64 (cbrt.f64 x) 2)))
(/.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) (/.f64 (pow.f64 (cbrt.f64 x) 2) (pow.f64 (cbrt.f64 (expm1.f64 x)) 2)))
(*.f64 (/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (sqrt.f64 x)) (/.f64 (cbrt.f64 (expm1.f64 x)) (sqrt.f64 x)))
(/.f64 (expm1.f64 x) x)
(*.f64 (/.f64 (sqrt.f64 (expm1.f64 x)) 1) (/.f64 (sqrt.f64 (expm1.f64 x)) x))
(/.f64 (expm1.f64 x) x)
(*.f64 (/.f64 (sqrt.f64 (expm1.f64 x)) (pow.f64 (cbrt.f64 x) 2)) (/.f64 (sqrt.f64 (expm1.f64 x)) (cbrt.f64 x)))
(*.f64 (/.f64 1 (pow.f64 (cbrt.f64 x) 2)) (/.f64 (expm1.f64 x) (cbrt.f64 x)))
(/.f64 (/.f64 (expm1.f64 x) (cbrt.f64 x)) (pow.f64 (cbrt.f64 x) 2))
(pow.f64 (/.f64 (expm1.f64 x) x) 1)
(/.f64 (expm1.f64 x) x)
(pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 3)
(/.f64 (expm1.f64 x) x)
(pow.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3) 1/3)
(/.f64 (expm1.f64 x) x)
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
(/.f64 (expm1.f64 x) x)
(pow.f64 (/.f64 x (expm1.f64 x)) -1)
(/.f64 (expm1.f64 x) x)
(neg.f64 (/.f64 (expm1.f64 x) (neg.f64 x)))
(/.f64 (expm1.f64 x) x)
(sqrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 2))
(/.f64 (expm1.f64 x) x)
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))
(/.f64 (expm1.f64 x) x)
(cbrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3))
(/.f64 (expm1.f64 x) x)
(expm1.f64 (log1p.f64 (/.f64 (expm1.f64 x) x)))
(/.f64 (expm1.f64 x) x)
(exp.f64 (log.f64 (/.f64 (expm1.f64 x) x)))
(/.f64 (expm1.f64 x) x)
(log1p.f64 (expm1.f64 (/.f64 (expm1.f64 x) x)))
(/.f64 (expm1.f64 x) x)
(+.f64 (exp.f64 x) -1)
(expm1.f64 x)
(-.f64 (exp.f64 x) 1)
(expm1.f64 x)
(*.f64 (expm1.f64 x) 1)
(expm1.f64 x)
(*.f64 1 (expm1.f64 x))
(expm1.f64 x)
(*.f64 (cbrt.f64 (expm1.f64 x)) (pow.f64 (cbrt.f64 (expm1.f64 x)) 2))
(expm1.f64 x)
(*.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (cbrt.f64 (expm1.f64 x)))
(expm1.f64 x)
(*.f64 (sqrt.f64 (expm1.f64 x)) (sqrt.f64 (expm1.f64 x)))
(expm1.f64 x)
(/.f64 (-.f64 (pow.f64 (exp.f64 x) 3) 1) (+.f64 (*.f64 (exp.f64 x) (exp.f64 x)) (+.f64 1 (*.f64 (exp.f64 x) 1))))
(/.f64 (+.f64 (pow.f64 (exp.f64 x) 3) -1) (fma.f64 (exp.f64 x) (exp.f64 x) (+.f64 1 (exp.f64 x))))
(/.f64 (+.f64 -1 (pow.f64 (exp.f64 x) 3)) (fma.f64 (exp.f64 x) (exp.f64 x) (+.f64 1 (exp.f64 x))))
(/.f64 (expm1.f64 (*.f64 3 x)) (+.f64 1 (fma.f64 (exp.f64 x) (exp.f64 x) (exp.f64 x))))
(/.f64 (-.f64 (*.f64 (exp.f64 x) (exp.f64 x)) 1) (+.f64 (exp.f64 x) 1))
(expm1.f64 x)
(pow.f64 (expm1.f64 x) 1)
(expm1.f64 x)
(pow.f64 (cbrt.f64 (expm1.f64 x)) 3)
(expm1.f64 x)
(pow.f64 (pow.f64 (expm1.f64 x) 3) 1/3)
(expm1.f64 x)
(pow.f64 (sqrt.f64 (expm1.f64 x)) 2)
(expm1.f64 x)
(sqrt.f64 (pow.f64 (expm1.f64 x) 2))
(expm1.f64 x)
(log.f64 (exp.f64 (expm1.f64 x)))
(expm1.f64 x)
(cbrt.f64 (pow.f64 (expm1.f64 x) 3))
(expm1.f64 x)
(exp.f64 (log.f64 (expm1.f64 x)))
(expm1.f64 x)
(log1p.f64 (expm1.f64 (expm1.f64 x)))
(expm1.f64 x)

eval14.0ms (0.6%)

Compiler

Compiled 745 to 369 computations (50.5% saved)

prune20.0ms (0.9%)

Pruning

4 alts after pruning (3 fresh and 1 done)

PrunedKeptTotal
New74377
Fresh000
Picked011
Done000
Total74478
Accurracy
100.0%
Counts
78 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(/.f64 (expm1.f64 x) x)
47.0%
(+.f64 (*.f64 1/2 x) 1)
99.9%
(*.f64 (/.f64 1 x) (expm1.f64 x))
46.9%
1
100.0%
(/.f64 (expm1.f64 x) x)
47.0%
(+.f64 (*.f64 1/2 x) 1)
99.9%
(*.f64 (/.f64 1 x) (expm1.f64 x))
46.9%
1
Compiler

Compiled 40 to 30 computations (25% saved)

localize37.0ms (1.7%)

Local Accuracy

Found 2 expressions with local accuracy:

NewAccuracyProgram
100.0%
(expm1.f64 x)
99.9%
(*.f64 (/.f64 1 x) (expm1.f64 x))
Compiler

Compiled 26 to 17 computations (34.6% saved)

series1.0ms (0%)

Counts
1 → 12
Calls

3 calls:

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

rewrite70.0ms (3.2%)

Algorithm
batch-egg-rewrite
Rules
1396×pow1
1280×add-exp-log
1280×log1p-expm1-u
1278×expm1-log1p-u
1250×add-log-exp
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0811
115411
2180711
Stop Event
node limit
Counts
1 → 22
Calls
Call 1
Inputs
(*.f64 (/.f64 1 x) (expm1.f64 x))
Outputs
(-.f64 (+.f64 1 (/.f64 (expm1.f64 x) x)) 1)
(-.f64 (/.f64 (exp.f64 x) x) (/.f64 1 x))
(/.f64 1 (/.f64 x (expm1.f64 x)))
(/.f64 (expm1.f64 x) x)
(/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (/.f64 x (cbrt.f64 (expm1.f64 x))))
(/.f64 (sqrt.f64 (expm1.f64 x)) (/.f64 x (sqrt.f64 (expm1.f64 x))))
(/.f64 (neg.f64 (expm1.f64 x)) (neg.f64 x))
(/.f64 (/.f64 (expm1.f64 x) (sqrt.f64 x)) (sqrt.f64 x))
(/.f64 (*.f64 (expm1.f64 x) -1) (neg.f64 x))
(/.f64 (*.f64 -1 (expm1.f64 x)) (neg.f64 x))
(/.f64 (/.f64 (expm1.f64 x) 1) x)
(/.f64 (/.f64 (expm1.f64 x) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 x))
(pow.f64 (/.f64 (expm1.f64 x) x) 1)
(pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 3)
(pow.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3) 1/3)
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
(sqrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 2))
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))
(cbrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3))
(expm1.f64 (log1p.f64 (/.f64 (expm1.f64 x) x)))
(exp.f64 (log.f64 (/.f64 (expm1.f64 x) x)))
(log1p.f64 (expm1.f64 (/.f64 (expm1.f64 x) x)))

simplify45.0ms (2%)

Algorithm
egg-herbie
Rules
1654×fma-def
672×log-prod
582×associate-/r/
482×associate-*r*
474×div-sub
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
076404
1165400
2535400
33048388
Stop Event
node limit
Counts
34 → 35
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)
(-.f64 (+.f64 1 (/.f64 (expm1.f64 x) x)) 1)
(-.f64 (/.f64 (exp.f64 x) x) (/.f64 1 x))
(/.f64 1 (/.f64 x (expm1.f64 x)))
(/.f64 (expm1.f64 x) x)
(/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (/.f64 x (cbrt.f64 (expm1.f64 x))))
(/.f64 (sqrt.f64 (expm1.f64 x)) (/.f64 x (sqrt.f64 (expm1.f64 x))))
(/.f64 (neg.f64 (expm1.f64 x)) (neg.f64 x))
(/.f64 (/.f64 (expm1.f64 x) (sqrt.f64 x)) (sqrt.f64 x))
(/.f64 (*.f64 (expm1.f64 x) -1) (neg.f64 x))
(/.f64 (*.f64 -1 (expm1.f64 x)) (neg.f64 x))
(/.f64 (/.f64 (expm1.f64 x) 1) x)
(/.f64 (/.f64 (expm1.f64 x) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 x))
(pow.f64 (/.f64 (expm1.f64 x) x) 1)
(pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 3)
(pow.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3) 1/3)
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
(sqrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 2))
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))
(cbrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3))
(expm1.f64 (log1p.f64 (/.f64 (expm1.f64 x) x)))
(exp.f64 (log.f64 (/.f64 (expm1.f64 x) x)))
(log1p.f64 (expm1.f64 (/.f64 (expm1.f64 x) 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))
(fma.f64 x (fma.f64 x 1/6 1/2) 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 (+.f64 (fma.f64 1/6 (*.f64 x x) 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)))
(fma.f64 1/2 x (fma.f64 x (*.f64 x (fma.f64 x 1/24 1/6)) 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)
(-.f64 (+.f64 1 (/.f64 (expm1.f64 x) x)) 1)
(/.f64 (expm1.f64 x) x)
(-.f64 (/.f64 (exp.f64 x) x) (/.f64 1 x))
(/.f64 (expm1.f64 x) x)
(/.f64 1 (/.f64 x (expm1.f64 x)))
(/.f64 (expm1.f64 x) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (pow.f64 (cbrt.f64 (expm1.f64 x)) 2) (/.f64 x (cbrt.f64 (expm1.f64 x))))
(/.f64 (expm1.f64 x) x)
(/.f64 (sqrt.f64 (expm1.f64 x)) (/.f64 x (sqrt.f64 (expm1.f64 x))))
(/.f64 (expm1.f64 x) x)
(/.f64 (neg.f64 (expm1.f64 x)) (neg.f64 x))
(/.f64 (expm1.f64 x) x)
(/.f64 (/.f64 (expm1.f64 x) (sqrt.f64 x)) (sqrt.f64 x))
(/.f64 (expm1.f64 x) x)
(/.f64 (*.f64 (expm1.f64 x) -1) (neg.f64 x))
(/.f64 (expm1.f64 x) x)
(/.f64 (*.f64 -1 (expm1.f64 x)) (neg.f64 x))
(/.f64 (expm1.f64 x) x)
(/.f64 (/.f64 (expm1.f64 x) 1) x)
(/.f64 (expm1.f64 x) x)
(/.f64 (/.f64 (expm1.f64 x) (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 x))
(/.f64 (expm1.f64 x) x)
(pow.f64 (/.f64 (expm1.f64 x) x) 1)
(/.f64 (expm1.f64 x) x)
(pow.f64 (cbrt.f64 (/.f64 (expm1.f64 x) x)) 3)
(/.f64 (expm1.f64 x) x)
(pow.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3) 1/3)
(/.f64 (expm1.f64 x) x)
(pow.f64 (sqrt.f64 (/.f64 (expm1.f64 x) x)) 2)
(/.f64 (expm1.f64 x) x)
(sqrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 2))
(/.f64 (expm1.f64 x) x)
(log.f64 (exp.f64 (/.f64 (expm1.f64 x) x)))
(/.f64 (expm1.f64 x) x)
(cbrt.f64 (pow.f64 (/.f64 (expm1.f64 x) x) 3))
(/.f64 (expm1.f64 x) x)
(expm1.f64 (log1p.f64 (/.f64 (expm1.f64 x) x)))
(/.f64 (expm1.f64 x) x)
(exp.f64 (log.f64 (/.f64 (expm1.f64 x) x)))
(/.f64 (expm1.f64 x) x)
(log1p.f64 (expm1.f64 (/.f64 (expm1.f64 x) x)))
(/.f64 (expm1.f64 x) x)

eval18.0ms (0.8%)

Compiler

Compiled 657 to 384 computations (41.6% saved)

prune12.0ms (0.5%)

Pruning

5 alts after pruning (2 fresh and 3 done)

PrunedKeptTotal
New65166
Fresh011
Picked022
Done011
Total65570
Accurracy
100.0%
Counts
70 → 5
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(/.f64 (expm1.f64 x) x)
47.0%
(+.f64 (*.f64 1/2 x) 1)
99.9%
(*.f64 (/.f64 1 x) (expm1.f64 x))
46.8%
(*.f64 (/.f64 1 x) x)
46.9%
1
100.0%
(/.f64 (expm1.f64 x) x)
47.0%
(+.f64 (*.f64 1/2 x) 1)
99.9%
(*.f64 (/.f64 1 x) (expm1.f64 x))
46.8%
(*.f64 (/.f64 1 x) x)
46.9%
1
Compiler

Compiled 52 to 38 computations (26.9% saved)

localize162.0ms (7.3%)

Local Accuracy

Found 1 expressions with local accuracy:

NewAccuracyProgram
99.7%
(*.f64 (/.f64 1 x) x)
Compiler

Compiled 12 to 8 computations (33.3% saved)

series0.0ms (0%)

Counts
1 → 12
Calls

3 calls:

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

rewrite289.0ms (13%)

Algorithm
batch-egg-rewrite
Rules
846×pow1
816×add-sqr-sqrt
800×*-un-lft-identity
778×add-exp-log
778×log1p-expm1-u
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
061
11211
211361
Stop Event
node limit
Counts
1 → 1
Calls
Call 1
Inputs
(*.f64 (/.f64 1 x) x)
Outputs
1

simplify12.0ms (0.5%)

Algorithm
egg-herbie
Rules
1-exp
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0113
1513
Stop Event
saturated
Counts
13 → 1
Calls
Call 1
Inputs
1
1
1
1
1
1
1
1
1
1
1
1
1
Outputs
1
1
1
1
1
1
1
1
1
1
1
1
1

eval0.0ms (0%)

Compiler

Compiled 2 to 2 computations (0% saved)

prune25.0ms (1.1%)

Pruning

5 alts after pruning (1 fresh and 4 done)

PrunedKeptTotal
New101
Fresh011
Picked011
Done033
Total156
Accurracy
100.0%
Counts
6 → 5
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(/.f64 (expm1.f64 x) x)
47.0%
(+.f64 (*.f64 1/2 x) 1)
99.9%
(*.f64 (/.f64 1 x) (expm1.f64 x))
46.8%
(*.f64 (/.f64 1 x) x)
46.9%
1
100.0%
(/.f64 (expm1.f64 x) x)
47.0%
(+.f64 (*.f64 1/2 x) 1)
99.9%
(*.f64 (/.f64 1 x) (expm1.f64 x))
46.8%
(*.f64 (/.f64 1 x) x)
46.9%
1
Compiler

Compiled 52 to 38 computations (26.9% saved)

localize0.0ms (0%)

eval0.0ms (0%)

Compiler

Compiled 1 to 1 computations (0% saved)

prune3.0ms (0.1%)

Pruning

5 alts after pruning (1 fresh and 4 done)

PrunedKeptTotal
New000
Fresh011
Picked000
Done044
Total055
Accurracy
100.0%
Counts
5 → 5
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(/.f64 (expm1.f64 x) x)
47.0%
(+.f64 (*.f64 1/2 x) 1)
99.9%
(*.f64 (/.f64 1 x) (expm1.f64 x))
46.8%
(*.f64 (/.f64 1 x) x)
46.9%
1
Compiler

Compiled 54 to 37 computations (31.5% saved)

regimes9.0ms (0.4%)

Counts
6 → 1
Calls
Call 1
Inputs
1
(*.f64 (/.f64 1 x) x)
(+.f64 (*.f64 1/2 x) 1)
(/.f64 (expm1.f64 x) x)
(*.f64 (/.f64 1 x) (expm1.f64 x))
(/.f64 (-.f64 (exp.f64 x) 1) x)
Outputs
(/.f64 (expm1.f64 x) x)
Calls

2 calls:

5.0ms
x
3.0ms
(/.f64 (-.f64 (exp.f64 x) 1) x)
Results
AccuracySegmentsBranch
100.0%1x
100.0%1(/.f64 (-.f64 (exp.f64 x) 1) x)
Compiler

Compiled 37 to 24 computations (35.1% saved)

regimes4.0ms (0.2%)

Counts
3 → 1
Calls
Call 1
Inputs
1
(*.f64 (/.f64 1 x) x)
(+.f64 (*.f64 1/2 x) 1)
Outputs
(+.f64 (*.f64 1/2 x) 1)
Calls

1 calls:

3.0ms
x
Results
AccuracySegmentsBranch
47.0%1x
Compiler

Compiled 14 to 10 computations (28.6% saved)

regimes4.0ms (0.2%)

Accuracy

Total -0.1b remaining (-0.2%)

Threshold costs -0.1b (-0.2%)

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

1 calls:

3.0ms
x
Results
AccuracySegmentsBranch
46.9%1x
Compiler

Compiled 9 to 6 computations (33.3% saved)

simplify5.0ms (0.2%)

Algorithm
egg-herbie
Rules
1-exp
+-commutative
*-commutative
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01025
11425
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(/.f64 (expm1.f64 x) x)
(+.f64 (*.f64 1/2 x) 1)
1
Outputs
(/.f64 (expm1.f64 x) x)
(+.f64 (*.f64 1/2 x) 1)
(+.f64 (*.f64 x 1/2) 1)
1
Compiler

Compiled 13 to 10 computations (23.1% saved)

soundness41.0ms (1.8%)

Rules
336×fma-def
68×distribute-rgt-in
52×distribute-lft-in
40×sub-neg
40×associate-/r*
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0811
11711
22011
32411
43311
54311
66211
710311
814711
922511
1034711
1153111
1260311
1363911
Stop Event
saturated
Compiler

Compiled 11 to 7 computations (36.4% saved)

end0.0ms (0%)

preprocess42.0ms (1.9%)

Compiler

Compiled 82 to 56 computations (31.7% saved)

Profiling

Loading profile data...