Details

Time bar (total: 3.3s)

analyze130.0ms (3.9%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%99.9%0.1%0%0%0%0
0%0%99.9%0.1%0%0%0%1
0%0%99.9%0.1%0%0%0%2
0%0%99.9%0.1%0%0%0%3
0%0%99.9%0.1%0%0%0%4
25%25%74.9%0.1%0%0%0%5
30.8%25%56.2%0.1%18.7%0%0%6
48%37.5%40.6%0.1%21.9%0%0%7
60%46.8%31.2%0.1%21.9%0%0%8
71.4%54.6%21.9%0.1%23.4%0%0%9
78.6%60.1%16.4%0.1%23.4%0%0%10
85.1%64.4%11.3%0.1%24.2%0%0%11
88.9%67.3%8.4%0.1%24.2%0%0%12
Compiler

Compiled 10 to 6 computations (40% saved)

sample1.1s (31.7%)

Results
979.0ms8256×body256valid
9.0ms105×body256infinite
Bogosity

preprocess31.0ms (0.9%)

Algorithm
egg-herbie
Rules
fma-def_binary64
+-commutative_binary64
*-commutative_binary64
associate-+r+_binary64
associate-+l+_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0916
11916
22616
33016
43216
022
Stop Event
saturated
saturated
Calls
Call 1
Inputs
0
1
Outputs
0
1
Call 2
Inputs
(+.f64 (+.f64 (*.f64 x x) y) y)
(+.f64 (+.f64 (*.f64 y y) x) x)
Outputs
(+.f64 (+.f64 (*.f64 x x) y) y)
(+.f64 y (fma.f64 x x y))
(+.f64 (+.f64 (*.f64 y y) x) x)
(+.f64 x (fma.f64 y y x))
Compiler

Compiled 11 to 7 computations (36.4% saved)

simplify13.0ms (0.4%)

Algorithm
egg-herbie
Rules
fma-def_binary64
+-commutative_binary64
*-commutative_binary64
associate-+r+_binary64
associate-+l+_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
068
1118
2158
3178
4188
Stop Event
saturated
Counts
1 → 2
Calls
Call 1
Inputs
(+.f64 (+.f64 (*.f64 x x) y) y)
Outputs
(+.f64 (+.f64 (*.f64 x x) y) y)
(+.f64 y (fma.f64 x x y))

eval1.0ms (0%)

Compiler

Compiled 15 to 7 computations (53.3% saved)

prune2.0ms (0.1%)

Pruning

3 alts after pruning (3 fresh and 0 done)

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

Compiled 17 to 9 computations (47.1% saved)

localize10.0ms (0.3%)

Local error

Found 1 expressions with local error:

NewErrorProgram
0.0b
(+.f64 y (fma.f64 x x y))
Compiler

Compiled 14 to 4 computations (71.4% saved)

series194.0ms (5.8%)

Counts
1 → 24
Calls

6 calls:

TimeVariablePointExpression
189.0ms
x
@-inf
(+.f64 y (fma.f64 x x y))
1.0ms
y
@0
(+.f64 y (fma.f64 x x y))
1.0ms
x
@inf
(+.f64 y (fma.f64 x x y))
1.0ms
x
@0
(+.f64 y (fma.f64 x x y))
1.0ms
y
@inf
(+.f64 y (fma.f64 x x y))

rewrite69.0ms (2.1%)

Algorithm
batch-egg-rewrite
Rules
620×pow1_binary64
577×add-log-exp_binary64
577×log1p-expm1-u_binary64
577×expm1-log1p-u_binary64
564×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
058
11098
215358
Stop Event
node limit
Counts
1 → 33
Calls
Call 1
Inputs
(+.f64 y (fma.f64 x x y))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (+.f64 y (fma.f64 x x y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (*.f64 y y) (-.f64 y (fma.f64 x x y))) (/.f64 (pow.f64 (fma.f64 x x y) 2) (-.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 y (fma.f64 x x y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 y (fma.f64 x x y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (+.f64 y (fma.f64 x x y))) (pow.f64 (cbrt.f64 (+.f64 y (fma.f64 x x y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (+.f64 y (fma.f64 x x y))) 2) (cbrt.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (+.f64 y (fma.f64 x x y))) (sqrt.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 y 3) (pow.f64 (fma.f64 x x y) 3)) (/.f64 1 (fma.f64 y y (*.f64 (fma.f64 x x y) (-.f64 (fma.f64 x x y) y)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (*.f64 y y) (pow.f64 (fma.f64 x x y) 2)) (/.f64 1 (-.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 y y (*.f64 (fma.f64 x x y) (-.f64 (fma.f64 x x y) y))) (+.f64 (pow.f64 y 3) (pow.f64 (fma.f64 x x y) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 y (fma.f64 x x y)) (-.f64 (*.f64 y y) (pow.f64 (fma.f64 x x y) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 y 3) (pow.f64 (fma.f64 x x y) 3)) (fma.f64 y y (*.f64 (fma.f64 x x y) (-.f64 (fma.f64 x x y) y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 y 3) (pow.f64 (fma.f64 x x y) 3)) (+.f64 (pow.f64 (fma.f64 x x y) 2) (-.f64 (*.f64 y y) (*.f64 y (fma.f64 x x y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 y y) (pow.f64 (fma.f64 x x y) 2)) (-.f64 y (fma.f64 x x y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 y 3) (pow.f64 (fma.f64 x x y) 3))) (neg.f64 (fma.f64 y y (*.f64 (fma.f64 x x y) (-.f64 (fma.f64 x x y) y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (*.f64 y y) (pow.f64 (fma.f64 x x y) 2))) (neg.f64 (-.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (fma.f64 x x y) 2) (*.f64 y y)) (-.f64 (fma.f64 x x y) y))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 y (fma.f64 x x y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 y (fma.f64 x x y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 y (fma.f64 x x y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 y (fma.f64 x x y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 y (fma.f64 x x y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 y (fma.f64 x x y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 y (fma.f64 x x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 x x y) y)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 y) 2) (cbrt.f64 y) (fma.f64 x x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 x x y)) 2) (cbrt.f64 (fma.f64 x x y)) y)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 y) (sqrt.f64 y) (fma.f64 x x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 x (sqrt.f64 y)) (hypot.f64 x (sqrt.f64 y)) y)))))

simplify208.0ms (6.2%)

Algorithm
egg-herbie
Rules
1366×sqr-pow_binary64
695×pow-sqr_binary64
617×cube-prod_binary64
611×fabs-mul_binary64
434×unswap-sqr_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
07168
115168
225168
336168
465168
5167168
6587168
71453168
81637168
91821168
102029168
112324168
122717168
133202168
143768168
154456168
165297168
175691168
185979168
196255168
206329168
216363168
227304168
Stop Event
node limit
Counts
57 → 38
Calls
Call 1
Inputs
(pow.f64 x 2)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(*.f64 2 y)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(*.f64 2 y)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(*.f64 2 y)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(pow.f64 x 2)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(pow.f64 x 2)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
Outputs
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(*.f64 2 y)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(*.f64 2 y)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(*.f64 2 y)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 x x (*.f64 2 y))

localize14.0ms (0.4%)

Local error

Found 2 expressions with local error:

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

Compiled 19 to 5 computations (73.7% saved)

series8.0ms (0.2%)

Counts
2 → 48
Calls

12 calls:

TimeVariablePointExpression
1.0ms
x
@0
(+.f64 (+.f64 (*.f64 x x) y) y)
1.0ms
x
@0
(+.f64 (*.f64 x x) y)
1.0ms
x
@inf
(+.f64 (*.f64 x x) y)
1.0ms
y
@inf
(+.f64 (+.f64 (*.f64 x x) y) y)
1.0ms
y
@0
(+.f64 (*.f64 x x) y)

rewrite155.0ms (4.6%)

Algorithm
batch-egg-rewrite
Rules
850×pow1_binary64
796×add-log-exp_binary64
796×log1p-expm1-u_binary64
796×expm1-log1p-u_binary64
778×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0613
114113
2216113
Stop Event
node limit
Counts
2 → 71
Calls
Call 1
Inputs
(+.f64 (*.f64 x x) y)
(+.f64 (+.f64 (*.f64 x x) y) y)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (fma.f64 x x y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 x 4) (-.f64 (*.f64 x x) y)) (/.f64 (*.f64 y y) (-.f64 (*.f64 x x) y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 x x y) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 x x y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 x x y)) (pow.f64 (cbrt.f64 (fma.f64 x x y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 x x y)) 2) (cbrt.f64 (fma.f64 x x y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (hypot.f64 x (sqrt.f64 y)) (hypot.f64 x (sqrt.f64 y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 x 6) (pow.f64 y 3)) (/.f64 1 (+.f64 (pow.f64 x 4) (*.f64 y (-.f64 y (*.f64 x x))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 x 4) (*.f64 y y)) (/.f64 1 (-.f64 (*.f64 x x) y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 x 4) (*.f64 y (-.f64 y (*.f64 x x)))) (+.f64 (pow.f64 x 6) (pow.f64 y 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (*.f64 x x) y) (-.f64 (pow.f64 x 4) (*.f64 y y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 x 6) (pow.f64 y 3)) (+.f64 (pow.f64 x 4) (*.f64 y (-.f64 y (*.f64 x x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 x 6) (pow.f64 y 3)) (+.f64 (*.f64 y y) (-.f64 (pow.f64 x 4) (*.f64 (*.f64 x x) y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 x 4) (*.f64 y y)) (-.f64 (*.f64 x x) y))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 x 6) (pow.f64 y 3))) (neg.f64 (+.f64 (pow.f64 x 4) (*.f64 y (-.f64 y (*.f64 x x))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 x 4) (*.f64 y y))) (neg.f64 (-.f64 (*.f64 x x) y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 y y) (pow.f64 x 4)) (-.f64 y (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 x x y) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 x x y)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (hypot.f64 x (sqrt.f64 y)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 x x y) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 x x y) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 x x y)))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 x x y) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 x x y)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 x x y)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 x x y)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x x y)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 x x) y)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 y (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 x 4)) (pow.f64 (cbrt.f64 x) 2) y)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 y) 2) (cbrt.f64 y) (*.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 y) (sqrt.f64 y) (*.f64 x x))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (+.f64 y (fma.f64 x x y))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (pow.f64 (fma.f64 x x y) 2) (-.f64 (fma.f64 x x y) y)) (/.f64 (*.f64 y y) (-.f64 (fma.f64 x x y) y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 y (fma.f64 x x y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 y (fma.f64 x x y)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (+.f64 y (fma.f64 x x y))) (pow.f64 (cbrt.f64 (+.f64 y (fma.f64 x x y))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (+.f64 y (fma.f64 x x y))) 2) (cbrt.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (+.f64 y (fma.f64 x x y))) (sqrt.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 y 3) (pow.f64 (fma.f64 x x y) 3)) (/.f64 1 (+.f64 (pow.f64 (fma.f64 x x y) 2) (*.f64 y (-.f64 y (fma.f64 x x y))))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (pow.f64 (fma.f64 x x y) 2) (*.f64 y y)) (/.f64 1 (-.f64 (fma.f64 x x y) y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (+.f64 (pow.f64 (fma.f64 x x y) 2) (*.f64 y (-.f64 y (fma.f64 x x y)))) (+.f64 (pow.f64 y 3) (pow.f64 (fma.f64 x x y) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 (fma.f64 x x y) y) (-.f64 (pow.f64 (fma.f64 x x y) 2) (*.f64 y y))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 y 3) (pow.f64 (fma.f64 x x y) 3)) (+.f64 (pow.f64 (fma.f64 x x y) 2) (*.f64 y (-.f64 y (fma.f64 x x y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 y 3) (pow.f64 (fma.f64 x x y) 3)) (+.f64 (*.f64 y y) (-.f64 (pow.f64 (fma.f64 x x y) 2) (*.f64 y (fma.f64 x x y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (fma.f64 x x y) 2) (*.f64 y y)) (-.f64 (fma.f64 x x y) y))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 y 3) (pow.f64 (fma.f64 x x y) 3))) (neg.f64 (+.f64 (pow.f64 (fma.f64 x x y) 2) (*.f64 y (-.f64 y (fma.f64 x x y))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (pow.f64 (fma.f64 x x y) 2) (*.f64 y y))) (neg.f64 (-.f64 (fma.f64 x x y) y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 x 6) (pow.f64 (+.f64 y y) 3)) (+.f64 (pow.f64 x 4) (-.f64 (*.f64 (+.f64 y y) (+.f64 y y)) (*.f64 (*.f64 x x) (+.f64 y y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 x 4) (*.f64 (+.f64 y y) (+.f64 y y))) (-.f64 (*.f64 x x) (+.f64 y y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 y y) (pow.f64 (fma.f64 x x y) 2)) (-.f64 y (fma.f64 x x y)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 y (fma.f64 x x y)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 y (fma.f64 x x y)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 y (fma.f64 x x y))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 y (fma.f64 x x y))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 y (fma.f64 x x y)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 y (fma.f64 x x y)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (+.f64 y (fma.f64 x x y))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x x (+.f64 y y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 x x) (+.f64 y y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 y (fma.f64 x x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (fma.f64 x x y) y)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (pow.f64 x 4)) (pow.f64 (cbrt.f64 x) 2) (+.f64 y y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (fma.f64 x x y)) 2) (cbrt.f64 (fma.f64 x x y)) y)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 y) 2) (cbrt.f64 y) (fma.f64 x x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (hypot.f64 x (sqrt.f64 y)) (hypot.f64 x (sqrt.f64 y)) y)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 y) (sqrt.f64 y) (fma.f64 x x y))))))

simplify259.0ms (7.8%)

Algorithm
egg-herbie
Rules
1366×sqr-pow_binary64
695×pow-sqr_binary64
617×cube-prod_binary64
604×fabs-mul_binary64
434×unswap-sqr_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
08309
117273
229273
340273
472273
5170273
6607273
71492273
81696273
91880273
102088273
112385273
122780273
133263273
143829273
154517273
165352273
175744273
186030273
196302273
206372273
216408273
227349273
Stop Event
node limit
Counts
119 → 79
Calls
Call 1
Inputs
y
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
(pow.f64 x 2)
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
(pow.f64 x 2)
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
(pow.f64 x 2)
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
y
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
y
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
(+.f64 y (pow.f64 x 2))
(*.f64 2 y)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(pow.f64 x 2)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(pow.f64 x 2)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(pow.f64 x 2)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(*.f64 2 y)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(*.f64 2 y)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
Outputs
y
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(pow.f64 x 2)
(*.f64 x x)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(pow.f64 x 2)
(*.f64 x x)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(pow.f64 x 2)
(*.f64 x x)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
y
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
y
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(+.f64 y (pow.f64 x 2))
(+.f64 y (*.f64 x x))
(fma.f64 x x y)
(*.f64 2 y)
(*.f64 y 2)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(pow.f64 x 2)
(*.f64 x x)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(*.f64 2 y)
(*.f64 y 2)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(*.f64 2 y)
(*.f64 y 2)
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))
(+.f64 (*.f64 2 y) (pow.f64 x 2))
(fma.f64 2 y (*.f64 x x))
(fma.f64 y 2 (*.f64 x x))

eval59.0ms (1.8%)

Compiler

Compiled 1500 to 495 computations (67% saved)

prune62.0ms (1.8%)

Pruning

5 alts after pruning (4 fresh and 1 done)

PrunedKeptTotal
New1134117
Fresh000
Picked011
Done101
Total1145119
Error
0b
Counts
119 → 5
Alt Table
Click to see full alt table
StatusErrorProgram
36.2b
(+.f64 (*.f64 x x) y)
19.8b
(+.f64 y y)
43.0b
(*.f64 x x)
0.0b
(+.f64 (+.f64 (*.f64 x x) y) y)
0b
(fma.f64 y 2 (*.f64 x x))
Compiler

Compiled 34 to 20 computations (41.2% saved)

localize8.0ms (0.2%)

Compiler

Compiled 6 to 3 computations (50% saved)

localize5.0ms (0.1%)

Compiler

Compiled 6 to 3 computations (50% saved)

localize8.0ms (0.3%)

Local error

Found 1 expressions with local error:

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

Compiled 12 to 4 computations (66.7% saved)

localize11.0ms (0.3%)

Compiler

Compiled 14 to 6 computations (57.1% saved)

eval34.0ms (1%)

Compiler

Compiled 371 to 155 computations (58.2% saved)

prune49.0ms (1.5%)

Pruning

6 alts after pruning (1 fresh and 5 done)

PrunedKeptTotal
New36137
Fresh000
Picked011
Done044
Total36642
Error
0b
Counts
42 → 6
Alt Table
Click to see full alt table
StatusErrorProgram
36.2b
(+.f64 (*.f64 x x) y)
19.8b
(+.f64 y y)
43.0b
(*.f64 x x)
0.0b
(+.f64 (+.f64 (*.f64 x x) y) y)
55.1b
y
0b
(fma.f64 y 2 (*.f64 x x))
Compiler

Compiled 37 to 22 computations (40.5% saved)

eval0.0ms (0%)

Compiler

Compiled 2 to 2 computations (0% saved)

prune5.0ms (0.1%)

Pruning

6 alts after pruning (1 fresh and 5 done)

PrunedKeptTotal
New000
Fresh011
Picked000
Done055
Total066
Error
0b
Counts
6 → 6
Alt Table
Click to see full alt table
StatusErrorProgram
36.2b
(+.f64 (*.f64 x x) y)
19.8b
(+.f64 y y)
43.0b
(*.f64 x x)
0.0b
(+.f64 (+.f64 (*.f64 x x) y) y)
55.1b
y
0b
(fma.f64 y 2 (*.f64 x x))
Compiler

Compiled 37 to 22 computations (40.5% saved)

eval0.0ms (0%)

Compiler

Compiled 2 to 2 computations (0% saved)

prune5.0ms (0.1%)

Pruning

6 alts after pruning (1 fresh and 5 done)

PrunedKeptTotal
New000
Fresh011
Picked000
Done055
Total066
Error
0b
Counts
6 → 6
Alt Table
Click to see full alt table
StatusErrorProgram
36.2b
(+.f64 (*.f64 x x) y)
19.8b
(+.f64 y y)
43.0b
(*.f64 x x)
0.0b
(+.f64 (+.f64 (*.f64 x x) y) y)
55.1b
y
0b
(fma.f64 y 2 (*.f64 x x))
Compiler

Compiled 37 to 22 computations (40.5% saved)

regimes85.0ms (2.6%)

Counts
7 → 1
Calls
Call 1
Inputs
y
(+.f64 y y)
(*.f64 x x)
(+.f64 (*.f64 x x) y)
(+.f64 (+.f64 (*.f64 x x) y) y)
(fma.f64 y 2 (*.f64 x x))
(+.f64 y (fma.f64 x x y))
Outputs
(fma.f64 y 2 (*.f64 x x))
Calls

4 calls:

51.0ms
(+.f64 (+.f64 (*.f64 x x) y) y)
11.0ms
x
11.0ms
y
8.0ms
(*.f64 x x)
Results
ErrorSegmentsBranch
0b1x
0b1y
0b1(+.f64 (+.f64 (*.f64 x x) y) y)
0b1(*.f64 x x)
Compiler

Compiled 53 to 22 computations (58.5% saved)

regimes84.0ms (2.5%)

Counts
5 → 1
Calls
Call 1
Inputs
y
(+.f64 y y)
(*.f64 x x)
(+.f64 (*.f64 x x) y)
(+.f64 (+.f64 (*.f64 x x) y) y)
Outputs
(+.f64 (+.f64 (*.f64 x x) y) y)
Calls

4 calls:

34.0ms
x
26.0ms
(*.f64 x x)
10.0ms
(+.f64 (+.f64 (*.f64 x x) y) y)
10.0ms
y
Results
ErrorSegmentsBranch
0.0b1x
0.0b1y
0.0b1(+.f64 (+.f64 (*.f64 x x) y) y)
0.0b1(*.f64 x x)
Compiler

Compiled 41 to 18 computations (56.1% saved)

regimes202.0ms (6.1%)

Counts
4 → 4
Calls
Call 1
Inputs
y
(+.f64 y y)
(*.f64 x x)
(+.f64 (*.f64 x x) y)
Outputs
(+.f64 y y)
(+.f64 (*.f64 x x) y)
(+.f64 y y)
(+.f64 (*.f64 x x) y)
Calls

3 calls:

123.0ms
y
47.0ms
(*.f64 x x)
27.0ms
x
Results
ErrorSegmentsBranch
8.2b3x
13.5b5y
7.2b4(*.f64 x x)
Compiler

Compiled 25 to 12 computations (52% saved)

bsearch79.0ms (2.4%)

Algorithm
binary-search
Steps
TimeLeftRight
22.0ms
2.0297366201766133e+111
2.673435112130213e+114
24.0ms
272680444346356.28
1.6294180043630055e+30
32.0ms
5.282676928943175e-43
3.558139187082845e-40
Compiler

Compiled 14 to 9 computations (35.7% saved)

regimes69.0ms (2.1%)

Counts
3 → 4
Calls
Call 1
Inputs
y
(+.f64 y y)
(*.f64 x x)
Outputs
(+.f64 y y)
(*.f64 x x)
(+.f64 y y)
(*.f64 x x)
Calls

3 calls:

29.0ms
y
19.0ms
x
19.0ms
(*.f64 x x)
Results
ErrorSegmentsBranch
8.7b3x
14.3b5y
7.5b4(*.f64 x x)
Compiler

Compiled 20 to 11 computations (45% saved)

bsearch73.0ms (2.2%)

Algorithm
binary-search
Steps
TimeLeftRight
23.0ms
2.0297366201766133e+111
2.673435112130213e+114
25.0ms
0.0012348663267073422
1539413174621.5925
24.0ms
2.799508792423e-32
6.437521020253781e-25
Compiler

Compiled 14 to 9 computations (35.7% saved)

regimes14.0ms (0.4%)

Accuracy

Total -35.2b remaining (-177.9%)

Threshold costs -35.2b (-177.9%)

Counts
2 → 1
Calls
Call 1
Inputs
y
(+.f64 y y)
Outputs
(+.f64 y y)
Calls

2 calls:

7.0ms
x
6.0ms
y
Results
ErrorSegmentsBranch
19.8b1x
19.8b1y
Compiler

Compiled 12 to 7 computations (41.7% saved)

simplify21.0ms (0.6%)

Algorithm
egg-herbie
Rules
+-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
026115
128115
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(fma.f64 y 2 (*.f64 x x))
(+.f64 (+.f64 (*.f64 x x) y) y)
(if (<=.f64 (*.f64 x x) 6631980103631277/12554203470773361527671578846415332832204710888928069025792) (+.f64 y y) (if (<=.f64 (*.f64 x x) 8725774219083401/32) (+.f64 (*.f64 x x) y) (if (<=.f64 (*.f64 x x) 2029736620176613282171956942372735418475466754177407781028612323224794624991784270475190772504511371431899037696) (+.f64 y y) (+.f64 (*.f64 x x) y))))
(if (<=.f64 (*.f64 x x) 159823698587831/5708990770823839524233143877797980545530986496) (+.f64 y y) (if (<=.f64 (*.f64 x x) 5694815773503037/4611686018427387904) (*.f64 x x) (if (<=.f64 (*.f64 x x) 2029736620176613282171956942372735418475466754177407781028612323224794624991784270475190772504511371431899037696) (+.f64 y y) (*.f64 x x))))
(+.f64 y y)
y
Outputs
(fma.f64 y 2 (*.f64 x x))
(+.f64 (+.f64 (*.f64 x x) y) y)
(+.f64 y (+.f64 y (*.f64 x x)))
(if (<=.f64 (*.f64 x x) 6631980103631277/12554203470773361527671578846415332832204710888928069025792) (+.f64 y y) (if (<=.f64 (*.f64 x x) 8725774219083401/32) (+.f64 (*.f64 x x) y) (if (<=.f64 (*.f64 x x) 2029736620176613282171956942372735418475466754177407781028612323224794624991784270475190772504511371431899037696) (+.f64 y y) (+.f64 (*.f64 x x) y))))
(if (<=.f64 (*.f64 x x) 6631980103631277/12554203470773361527671578846415332832204710888928069025792) (+.f64 y y) (if (<=.f64 (*.f64 x x) 8725774219083401/32) (+.f64 y (*.f64 x x)) (if (<=.f64 (*.f64 x x) 2029736620176613282171956942372735418475466754177407781028612323224794624991784270475190772504511371431899037696) (+.f64 y y) (+.f64 y (*.f64 x x)))))
(if (<=.f64 (*.f64 x x) 159823698587831/5708990770823839524233143877797980545530986496) (+.f64 y y) (if (<=.f64 (*.f64 x x) 5694815773503037/4611686018427387904) (*.f64 x x) (if (<=.f64 (*.f64 x x) 2029736620176613282171956942372735418475466754177407781028612323224794624991784270475190772504511371431899037696) (+.f64 y y) (*.f64 x x))))
(+.f64 y y)
y
Compiler

Compiled 93 to 42 computations (54.8% saved)

soundness259.0ms (7.8%)

Algorithm
egg-herbie
Rules
1366×sqr-pow_binary64
695×pow-sqr_binary64
617×cube-prod_binary64
604×fabs-mul_binary64
434×unswap-sqr_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
08309
117273
229273
340273
472273
5170273
6607273
71492273
81696273
91880273
102088273
112385273
122780273
133263273
143829273
154517273
165352273
175744273
186030273
196302273
206372273
216408273
227349273
Stop Event
node limit
Compiler

Compiled 34 to 25 computations (26.5% saved)

end50.0ms (1.5%)

Compiler

Compiled 83 to 26 computations (68.7% saved)

Profiling

Loading profile data...