Details

Time bar (total: 7.2s)

analyze286.0ms (4%)

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
0%0%99.9%0.1%0%0%0%5
0%0%99.9%0.1%0%0%0%6
12.5%12.5%87.4%0.1%0%0%0%7
18.8%18.7%81.1%0.1%0%0%0%8
25.6%25%72.5%0.1%2.3%0%0%9
36.7%34.3%59.3%0.1%6.2%0%0%10
44.2%40.6%51.3%0.1%8%0%0%11
52%46.8%43.2%0.1%9.8%0%0%12
Compiler

Compiled 11 to 7 computations (36.4% saved)

sample912.0ms (12.7%)

Results
800.0ms8256×body256valid
99.0ms1140×body256infinite
Bogosity

preprocess10.0ms (0.1%)

Algorithm
egg-herbie
Rules
14×rational.json-simplify-1
rational.json-simplify-2
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01776
12876
033
Stop Event
saturated
saturated
Calls
Call 1
Inputs
0
1
2
Outputs
0
1
2
Call 2
Inputs
(+.f64 x (*.f64 y (+.f64 z x)))
(+.f64 y (*.f64 x (+.f64 z y)))
(+.f64 z (*.f64 y (+.f64 x z)))
(+.f64 x (*.f64 z (+.f64 y x)))
Outputs
(+.f64 x (*.f64 y (+.f64 z x)))
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 y (*.f64 x (+.f64 z y)))
(+.f64 y (*.f64 x (+.f64 y z)))
(+.f64 z (*.f64 y (+.f64 x z)))
(+.f64 x (*.f64 z (+.f64 y x)))
(+.f64 x (*.f64 z (+.f64 x y)))
Compiler

Compiled 13 to 9 computations (30.8% saved)

simplify8.0ms (0.1%)

Algorithm
egg-herbie
Rules
rational.json-simplify-1
rational.json-simplify-2
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0819
11119
Stop Event
saturated
Counts
1 → 2
Calls
Call 1
Inputs
(+.f64 x (*.f64 y (+.f64 z x)))
Outputs
(+.f64 x (*.f64 y (+.f64 z x)))
(+.f64 x (*.f64 y (+.f64 x z)))

eval0.0ms (0%)

Compiler

Compiled 17 to 9 computations (47.1% saved)

prune1.0ms (0%)

Pruning

2 alts after pruning (2 fresh and 0 done)

PrunedKeptTotal
New112
Fresh011
Picked000
Done000
Total123
Error
0.0b
Counts
3 → 1
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(+.f64 x (*.f64 y (+.f64 z x)))
Compiler

Compiled 10 to 6 computations (40% saved)

localize6.0ms (0.1%)

Local error

Found 2 expressions with local error:

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

Compiled 21 to 6 computations (71.4% saved)

series5.0ms (0.1%)

Counts
2 → 60
Calls

18 calls:

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

rewrite108.0ms (1.5%)

Algorithm
batch-egg-rewrite
Rules
2026×bool.json-1
1292×rational.json-simplify-35
1260×bool.json-2
1230×rational.json-1
1230×rational.json-2
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0832
18032
221632
345832
496932
5216432
6460132
7765732
Stop Event
node limit
Counts
2 → 33
Calls
Call 1
Inputs
(*.f64 y (+.f64 z x))
(+.f64 x (*.f64 y (+.f64 z x)))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y (+.f64 z x)) 0)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 y (+.f64 z x)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y (*.f64 (+.f64 z x) 1/2)) (*.f64 y (*.f64 (+.f64 z x) 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (*.f64 y (+.f64 z x)) 0)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (+.f64 z x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (*.f64 (+.f64 z x) 2)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (*.f64 (+.f64 z x) 4)) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (*.f64 y (+.f64 z x)) 8) 8)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)) 16)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) 32)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)))) 64)))) (#(struct:change #<rule egg-rr> (2) ((x not (not (*.f64 y (+.f64 z x))))))) (#(struct:change #<rule egg-rr> (2) ((x and (*.f64 y (+.f64 z x)) (*.f64 y (+.f64 z x)))))) (#(struct:change #<rule egg-rr> (2) ((x or (*.f64 y (+.f64 z x)) (*.f64 y (+.f64 z x)))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 x (*.f64 y (+.f64 z x))) 0)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 x (*.f64 y (+.f64 z x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 2 (+.f64 (*.f64 y (*.f64 (+.f64 z x) 1/2)) (*.f64 x 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 2 (+.f64 (*.f64 x 1/2) (*.f64 y (*.f64 (+.f64 z x) 1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 4 (/.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4) 1/4)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/2 (+.f64 (*.f64 y (*.f64 (+.f64 z x) 2)) (+.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/2 (+.f64 (+.f64 x x) (*.f64 y (*.f64 (+.f64 z x) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1/2) 2)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/4 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 2) 2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8) 8)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8)) 16)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8))) 32)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8)))) 64)))) (#(struct:change #<rule egg-rr> (2) ((x not (not (+.f64 x (*.f64 y (+.f64 z x)))))))) (#(struct:change #<rule egg-rr> (2) ((x and (+.f64 x (*.f64 y (+.f64 z x))) (+.f64 x (*.f64 y (+.f64 z x))))))) (#(struct:change #<rule egg-rr> (2) ((x or (+.f64 x (*.f64 y (+.f64 z x))) (+.f64 x (*.f64 y (+.f64 z x))))))))

simplify857.0ms (12%)

Algorithm
egg-herbie
Rules
7438×rational.json-simplify-41
3942×rational.json-simplify-35
1542×rational.json-simplify-2
906×rational.json-simplify-1
530×rational.json-simplify-51
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0901677
11971491
24721491
312311491
425151491
532521491
635851491
737821491
839121491
940291491
1041341491
1142381491
1244651491
1345881491
1446191491
1546391491
1646521491
1746601491
1846621491
1947661491
2048701491
2149741491
2250781491
2351821491
2452861491
2553901491
2654941491
2755981491
2857021491
2958061491
3059101491
3160141491
3260141491
Stop Event
node limit
Counts
93 → 51
Calls
Call 1
Inputs
(*.f64 y x)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y x)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(*.f64 (+.f64 1 y) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
x
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(*.f64 y z)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(*.f64 y z)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 (*.f64 y (+.f64 z x)) 0)
(+.f64 0 (*.f64 y (+.f64 z x)))
(+.f64 (*.f64 y (*.f64 (+.f64 z x) 1/2)) (*.f64 y (*.f64 (+.f64 z x) 1/2)))
(-.f64 (*.f64 y (+.f64 z x)) 0)
(/.f64 (*.f64 y (+.f64 z x)) 1)
(/.f64 (*.f64 y (*.f64 (+.f64 z x) 2)) 2)
(/.f64 (*.f64 y (*.f64 (+.f64 z x) 4)) 4)
(/.f64 (*.f64 (*.f64 y (+.f64 z x)) 8) 8)
(/.f64 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)) 16)
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) 32)
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)))) 64)
(-.f64 (+.f64 x (*.f64 y (+.f64 z x))) 0)
(*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1)
(*.f64 1 (+.f64 x (*.f64 y (+.f64 z x))))
(*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1/2))
(*.f64 2 (+.f64 (*.f64 y (*.f64 (+.f64 z x) 1/2)) (*.f64 x 1/2)))
(*.f64 2 (+.f64 (*.f64 x 1/2) (*.f64 y (*.f64 (+.f64 z x) 1/2))))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 2) 1/2)
(*.f64 4 (/.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4) 1/4)
(*.f64 1/2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 2))
(*.f64 1/2 (+.f64 (*.f64 y (*.f64 (+.f64 z x) 2)) (+.f64 x x)))
(*.f64 1/2 (+.f64 (+.f64 x x) (*.f64 y (*.f64 (+.f64 z x) 2))))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1/2) 2)
(*.f64 1/4 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4))
(*.f64 (/.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4) 4)
(/.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1)
(/.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 2) 2)
(/.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4) 4)
(/.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8) 8)
(/.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8)) 16)
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8))) 32)
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8)))) 64)
Outputs
(*.f64 y x)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(*.f64 y x)
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y z) (*.f64 y x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 x (+.f64 y 1))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
x
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y x) x)
(+.f64 x (*.f64 y x))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 y z)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 y z)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) 0)
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 0 (*.f64 y (+.f64 z x)))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y (*.f64 (+.f64 z x) 1/2)) (*.f64 y (*.f64 (+.f64 z x) 1/2)))
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(-.f64 (*.f64 y (+.f64 z x)) 0)
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(/.f64 (*.f64 y (+.f64 z x)) 1)
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(/.f64 (*.f64 y (*.f64 (+.f64 z x) 2)) 2)
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(/.f64 (*.f64 y (*.f64 (+.f64 z x) 4)) 4)
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(/.f64 (*.f64 (*.f64 y (+.f64 z x)) 8) 8)
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(/.f64 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)) 16)
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) 32)
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)))) 64)
(+.f64 (*.f64 y x) (*.f64 y z))
(*.f64 y (+.f64 x z))
(-.f64 (+.f64 x (*.f64 y (+.f64 z x))) 0)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 1 (+.f64 x (*.f64 y (+.f64 z x))))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1/2))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 2 (+.f64 (*.f64 y (*.f64 (+.f64 z x) 1/2)) (*.f64 x 1/2)))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 2 (+.f64 (*.f64 x 1/2) (*.f64 y (*.f64 (+.f64 z x) 1/2))))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 2) 1/2)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 4 (/.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4) 1/4)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 1/2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 2))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 1/2 (+.f64 (*.f64 y (*.f64 (+.f64 z x) 2)) (+.f64 x x)))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 1/2 (+.f64 (+.f64 x x) (*.f64 y (*.f64 (+.f64 z x) 2))))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1/2) 2)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 1/4 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 (/.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4) 4)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (+.f64 x (*.f64 y (+.f64 z x))) 1)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 2) 2)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 4) 4)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8) 8)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8)) 16)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8))) 32)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 z x))) 8)))) 64)
(+.f64 x (*.f64 y (+.f64 x z)))

eval8.0ms (0.1%)

Compiler

Compiled 534 to 228 computations (57.3% saved)

prune11.0ms (0.1%)

Pruning

7 alts after pruning (6 fresh and 1 done)

PrunedKeptTotal
New45651
Fresh000
Picked011
Done000
Total45752
Error
0b
Counts
52 → 7
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
21.7b
(+.f64 (*.f64 y x) x)
0.0b
(+.f64 x (*.f64 y (+.f64 z x)))
11.2b
(+.f64 x (*.f64 y z))
21.7b
(*.f64 (+.f64 1 y) x)
30.0b
(*.f64 y (+.f64 z x))
32.7b
x
Compiler

Compiled 102 to 65 computations (36.3% saved)

localize8.0ms (0.1%)

Local error

Found 2 expressions with local error:

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

Compiled 26 to 7 computations (73.1% saved)

series3.0ms (0%)

Counts
2 → 42
Calls

15 calls:

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

rewrite90.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
1646×bool.json-1
1646×bool.json-2
1620×rational.json-1
1620×rational.json-2
1620×rational.json-3
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
0938
19238
225432
356932
4128332
5310332
6638032
Stop Event
node limit
Counts
2 → 42
Calls
Call 1
Inputs
(+.f64 (*.f64 y x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 x (*.f64 y x)) 0)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 x (+.f64 y 1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 x (*.f64 y x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 x (*.f64 y x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 2 (*.f64 x (/.f64 (+.f64 y 1) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x x) (+.f64 y 1)) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 x x) (*.f64 (+.f64 y 1) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 x x) (/.f64 (+.f64 y 1) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 y 1) x)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 4 (/.f64 (+.f64 x (*.f64 y x)) 4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x (*.f64 y x)) 4) 1/4)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 2 (+.f64 y 1)) (*.f64 x 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/2 (*.f64 (+.f64 x x) (+.f64 y 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x 1/2) (*.f64 2 (+.f64 y 1)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 x (/.f64 (+.f64 y 1) 2)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 y 1) 1/2) (+.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/4 (*.f64 (+.f64 x (*.f64 y x)) 4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (+.f64 y 1) 2) (+.f64 x x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (+.f64 x (*.f64 y x)) 4) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 x (*.f64 y x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x x) (+.f64 y 1)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x (*.f64 y x)) 4) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4)) 8)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4))) 16)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4)))) 32)))) (#(struct:change #<rule egg-rr> (2) ((x not (not (+.f64 x (*.f64 y x))))))) (#(struct:change #<rule egg-rr> (2) ((x and (+.f64 x (*.f64 y x)) (+.f64 x (*.f64 y x)))))) (#(struct:change #<rule egg-rr> (2) ((x or (+.f64 x (*.f64 y x)) (+.f64 x (*.f64 y x)))))))
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 x (*.f64 y (+.f64 x z))) 0)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 x (*.f64 y (+.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 4 (/.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4) 1/4)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1/2) 2)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/4 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 2) 2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4)) 8)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))) 16)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4)))) 32)))) (#(struct:change #<rule egg-rr> (2) ((x not (not (+.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x and (+.f64 x (*.f64 y (+.f64 x z))) (+.f64 x (*.f64 y (+.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x or (+.f64 x (*.f64 y (+.f64 x z))) (+.f64 x (*.f64 y (+.f64 x z))))))))

simplify445.0ms (6.2%)

Algorithm
egg-herbie
Rules
2278×rational.json-simplify-2
1824×rational.json-simplify-35
1822×rational.json-simplify-51
1534×rational.json-simplify-1
1086×rational.json-simplify-42
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01011302
11931302
24631302
39991302
417151302
521261302
623161302
725231302
827321302
930471302
1047461302
1151071302
1253681302
1355281302
1456931302
1558441302
1679981302
Stop Event
node limit
Counts
84 → 61
Calls
Call 1
Inputs
x
(*.f64 y x)
(*.f64 y x)
(*.f64 (+.f64 1 y) x)
(*.f64 (+.f64 1 y) x)
(*.f64 (+.f64 1 y) x)
(*.f64 (+.f64 1 y) x)
(*.f64 (+.f64 1 y) x)
(*.f64 (+.f64 1 y) x)
(*.f64 (+.f64 1 y) x)
(*.f64 (+.f64 1 y) x)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
x
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(+.f64 (*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x)))) x)
(+.f64 (*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x)))) x)
(+.f64 (*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x)))) x)
(+.f64 (*.f64 y x) x)
(*.f64 y z)
(*.f64 y z)
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(*.f64 (+.f64 1 y) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(-.f64 (+.f64 x (*.f64 y x)) 0)
(*.f64 x (+.f64 y 1))
(*.f64 (+.f64 x (*.f64 y x)) 1)
(*.f64 1 (+.f64 x (*.f64 y x)))
(*.f64 2 (*.f64 x (/.f64 (+.f64 y 1) 2)))
(*.f64 (*.f64 (+.f64 x x) (+.f64 y 1)) 1/2)
(*.f64 (+.f64 x x) (*.f64 (+.f64 y 1) 1/2))
(*.f64 (+.f64 x x) (/.f64 (+.f64 y 1) 2))
(*.f64 (+.f64 y 1) x)
(*.f64 4 (/.f64 (+.f64 x (*.f64 y x)) 4))
(*.f64 (*.f64 (+.f64 x (*.f64 y x)) 4) 1/4)
(*.f64 (*.f64 2 (+.f64 y 1)) (*.f64 x 1/2))
(*.f64 1/2 (*.f64 (+.f64 x x) (+.f64 y 1)))
(*.f64 (*.f64 x 1/2) (*.f64 2 (+.f64 y 1)))
(*.f64 (*.f64 x (/.f64 (+.f64 y 1) 2)) 2)
(*.f64 (*.f64 (+.f64 y 1) 1/2) (+.f64 x x))
(*.f64 1/4 (*.f64 (+.f64 x (*.f64 y x)) 4))
(*.f64 (/.f64 (+.f64 y 1) 2) (+.f64 x x))
(*.f64 (/.f64 (+.f64 x (*.f64 y x)) 4) 4)
(/.f64 (+.f64 x (*.f64 y x)) 1)
(/.f64 (*.f64 (+.f64 x x) (+.f64 y 1)) 2)
(/.f64 (*.f64 (+.f64 x (*.f64 y x)) 4) 4)
(/.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4)) 8)
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4))) 16)
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4)))) 32)
(-.f64 (+.f64 x (*.f64 y (+.f64 x z))) 0)
(*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1)
(*.f64 1 (+.f64 x (*.f64 y (+.f64 x z))))
(*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1/2))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 2) 1/2)
(*.f64 4 (/.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4) 1/4)
(*.f64 1/2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 2))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1/2) 2)
(*.f64 1/4 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))
(*.f64 (/.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4) 4)
(/.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1)
(/.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 2) 2)
(/.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4) 4)
(/.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4)) 8)
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))) 16)
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4)))) 32)
Outputs
x
(*.f64 y x)
(*.f64 x y)
(*.f64 y x)
(*.f64 x y)
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
x
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y (+.f64 z x)) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x)))) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x)))) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x)))) x)
(+.f64 x (*.f64 y (+.f64 x z)))
(+.f64 (*.f64 y x) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 y z)
(*.f64 y z)
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 x (+.f64 y 1)) (*.f64 y z))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (+.f64 x (*.f64 x y)))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 x (+.f64 y 1)) (*.f64 y z))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (+.f64 x (*.f64 x y)))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 x (+.f64 y 1)) (*.f64 y z))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (+.f64 x (*.f64 x y)))
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 x (+.f64 y 1)) (*.f64 y z))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (+.f64 x (*.f64 x y)))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 x (+.f64 y 1)) (*.f64 y z))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (+.f64 x (*.f64 x y)))
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 x (+.f64 y 1)) (*.f64 y z))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (+.f64 x (*.f64 x y)))
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(+.f64 (*.f64 x (+.f64 y 1)) (*.f64 y z))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (+.f64 x (*.f64 x y)))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(+.f64 (*.f64 x (+.f64 y 1)) (*.f64 y z))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (+.f64 x (*.f64 x y)))
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(+.f64 (*.f64 x (+.f64 y 1)) (*.f64 y z))
(+.f64 (*.f64 y z) (*.f64 x (+.f64 y 1)))
(+.f64 (*.f64 y z) (+.f64 x (*.f64 x y)))
(-.f64 (+.f64 x (*.f64 y x)) 0)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 x (*.f64 y x)) 1)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 1 (+.f64 x (*.f64 y x)))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 2 (*.f64 x (/.f64 (+.f64 y 1) 2)))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (*.f64 (+.f64 x x) (+.f64 y 1)) 1/2)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 x x) (*.f64 (+.f64 y 1) 1/2))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 x x) (/.f64 (+.f64 y 1) 2))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (+.f64 y 1) x)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 4 (/.f64 (+.f64 x (*.f64 y x)) 4))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (*.f64 (+.f64 x (*.f64 y x)) 4) 1/4)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (*.f64 2 (+.f64 y 1)) (*.f64 x 1/2))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 1/2 (*.f64 (+.f64 x x) (+.f64 y 1)))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (*.f64 x 1/2) (*.f64 2 (+.f64 y 1)))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (*.f64 x (/.f64 (+.f64 y 1) 2)) 2)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (*.f64 (+.f64 y 1) 1/2) (+.f64 x x))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 1/4 (*.f64 (+.f64 x (*.f64 y x)) 4))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (/.f64 (+.f64 y 1) 2) (+.f64 x x))
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(*.f64 (/.f64 (+.f64 x (*.f64 y x)) 4) 4)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(/.f64 (+.f64 x (*.f64 y x)) 1)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(/.f64 (*.f64 (+.f64 x x) (+.f64 y 1)) 2)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(/.f64 (*.f64 (+.f64 x (*.f64 y x)) 4) 4)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(/.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4)) 8)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4))) 16)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y x)) 4)))) 32)
(*.f64 x (+.f64 y 1))
(+.f64 x (*.f64 x y))
(-.f64 (+.f64 x (*.f64 y (+.f64 x z))) 0)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 1 (+.f64 x (*.f64 y (+.f64 x z))))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1/2))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 2) 1/2)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 4 (/.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4) 1/4)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 1/2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 2))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1/2) 2)
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 1/4 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))
(+.f64 x (*.f64 y (+.f64 x z)))
(*.f64 (/.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4) 4)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 2) 2)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4) 4)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4)) 8)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))) 16)
(+.f64 x (*.f64 y (+.f64 x z)))
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y (+.f64 x z))) 4)))) 32)
(+.f64 x (*.f64 y (+.f64 x z)))

localize5.0ms (0.1%)

Local error

Found 1 expressions with local error:

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

Compiled 14 to 5 computations (64.3% saved)

localize76.0ms (1.1%)

Local error

Found 1 expressions with local error:

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

Compiled 14 to 9 computations (35.7% saved)

series1.0ms (0%)

Counts
1 → 12
Calls

6 calls:

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

rewrite92.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
1626×bool.json-1
1626×bool.json-2
1586×rational.json-1
1586×rational.json-2
1184×rational.json-simplify-35
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0713
18013
224813
348313
494113
5202813
6410613
7651613
Stop Event
node limit
Counts
1 → 11
Calls
Call 1
Inputs
(*.f64 (+.f64 1 y) x)
Outputs
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (+.f64 1 y) x) 0)))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 (+.f64 1 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (+.f64 1 y) (*.f64 x 1/2)) (*.f64 (+.f64 1 y) (*.f64 x 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (*.f64 (+.f64 1 y) x) 0)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 y) x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 y) (+.f64 x x)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 1 y) (*.f64 x 4)) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (*.f64 (+.f64 1 y) x) 8) 8)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8)) 16)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8))) 32)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8))) (*.f64 2 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8)))) 64)))) (#(struct:change #<rule egg-rr> (2) ((x not (not (*.f64 (+.f64 1 y) x)))))) (#(struct:change #<rule egg-rr> (2) ((x and (*.f64 (+.f64 1 y) x) (*.f64 (+.f64 1 y) x))))) (#(struct:change #<rule egg-rr> (2) ((x or (*.f64 (+.f64 1 y) x) (*.f64 (+.f64 1 y) x))))))

simplify1.2s (16.7%)

Algorithm
egg-herbie
Rules
4920×rational.json-simplify-35
2506×rational.json-simplify-2
1114×rational.json-simplify-53
970×rational.json-simplify-1
790×rational.json-simplify-43
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
038275
192275
2182275
3436275
41871275
53522275
64343275
74716275
84927275
95132275
105314275
115652275
125652275
135725275
145895275
156081275
166310275
176479275
186626275
196770275
206914275
217058275
227202275
237346275
247346275
257452275
267452275
277596275
287740275
297884275
Stop Event
node limit
Counts
23 → 17
Calls
Call 1
Inputs
x
(+.f64 (*.f64 y x) x)
(+.f64 (*.f64 y x) x)
(+.f64 (*.f64 y x) x)
(*.f64 y x)
(+.f64 (*.f64 y x) x)
(+.f64 (*.f64 y x) x)
(+.f64 (*.f64 y x) x)
(*.f64 y x)
(+.f64 (*.f64 y x) x)
(+.f64 (*.f64 y x) x)
(+.f64 (*.f64 y x) x)
(+.f64 (*.f64 (+.f64 1 y) x) 0)
(+.f64 0 (*.f64 (+.f64 1 y) x))
(+.f64 (*.f64 (+.f64 1 y) (*.f64 x 1/2)) (*.f64 (+.f64 1 y) (*.f64 x 1/2)))
(-.f64 (*.f64 (+.f64 1 y) x) 0)
(/.f64 (*.f64 (+.f64 1 y) x) 1)
(/.f64 (*.f64 (+.f64 1 y) (+.f64 x x)) 2)
(/.f64 (*.f64 (+.f64 1 y) (*.f64 x 4)) 4)
(/.f64 (*.f64 (*.f64 (+.f64 1 y) x) 8) 8)
(/.f64 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8)) 16)
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8))) 32)
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8))) (*.f64 2 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8)))) 64)
Outputs
x
(+.f64 (*.f64 y x) x)
(+.f64 x (*.f64 x y))
(+.f64 (*.f64 y x) x)
(+.f64 x (*.f64 x y))
(+.f64 (*.f64 y x) x)
(+.f64 x (*.f64 x y))
(*.f64 y x)
(*.f64 x y)
(+.f64 (*.f64 y x) x)
(+.f64 x (*.f64 x y))
(+.f64 (*.f64 y x) x)
(+.f64 x (*.f64 x y))
(+.f64 (*.f64 y x) x)
(+.f64 x (*.f64 x y))
(*.f64 y x)
(*.f64 x y)
(+.f64 (*.f64 y x) x)
(+.f64 x (*.f64 x y))
(+.f64 (*.f64 y x) x)
(+.f64 x (*.f64 x y))
(+.f64 (*.f64 y x) x)
(+.f64 x (*.f64 x y))
(+.f64 (*.f64 (+.f64 1 y) x) 0)
(*.f64 x (+.f64 y 1))
(+.f64 0 (*.f64 (+.f64 1 y) x))
(*.f64 x (+.f64 y 1))
(+.f64 (*.f64 (+.f64 1 y) (*.f64 x 1/2)) (*.f64 (+.f64 1 y) (*.f64 x 1/2)))
(*.f64 x (+.f64 y 1))
(-.f64 (*.f64 (+.f64 1 y) x) 0)
(*.f64 x (+.f64 y 1))
(/.f64 (*.f64 (+.f64 1 y) x) 1)
(*.f64 x (+.f64 y 1))
(/.f64 (*.f64 (+.f64 1 y) (+.f64 x x)) 2)
(*.f64 x (+.f64 y 1))
(/.f64 (*.f64 (+.f64 1 y) (*.f64 x 4)) 4)
(*.f64 x (+.f64 y 1))
(/.f64 (*.f64 (*.f64 (+.f64 1 y) x) 8) 8)
(*.f64 x (+.f64 y 1))
(/.f64 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8)) 16)
(*.f64 x (+.f64 y 1))
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8))) 32)
(*.f64 x (+.f64 y 1))
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8))) (*.f64 2 (*.f64 2 (*.f64 (*.f64 (+.f64 1 y) x) 8)))) 64)
(*.f64 x (+.f64 y 1))

localize1.1s (15%)

Local error

Found 1 expressions with local error:

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

Compiled 14 to 5 computations (64.3% saved)

series1.0ms (0%)

Counts
1 → 36
Calls

9 calls:

TimeVariablePointExpression
0.0ms
x
@0
(+.f64 x (*.f64 y z))
0.0ms
y
@-inf
(+.f64 x (*.f64 y z))
0.0ms
x
@-inf
(+.f64 x (*.f64 y z))
0.0ms
x
@inf
(+.f64 x (*.f64 y z))
0.0ms
z
@-inf
(+.f64 x (*.f64 y z))

rewrite91.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
1618×bool.json-1
1618×bool.json-2
1586×rational.json-1
1586×rational.json-2
1586×rational.json-3
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0713
17013
219613
341713
486113
5188513
6389913
7638113
Stop Event
node limit
Counts
1 → 20
Calls
Call 1
Inputs
(+.f64 x (*.f64 y z))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 x (*.f64 y z)) 0)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 x (*.f64 y z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (+.f64 x (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 2 (+.f64 (*.f64 x 1/2) (*.f64 y (*.f64 z 1/2))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x (*.f64 y z)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 4 (/.f64 (+.f64 x (*.f64 y z)) 4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x (*.f64 y z)) 4) 1/4)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/2 (*.f64 (+.f64 x (*.f64 y z)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/2 (+.f64 (*.f64 y (+.f64 z z)) (+.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 x (*.f64 y z)) 1/2) 2)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/4 (*.f64 (+.f64 x (*.f64 y z)) 4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (+.f64 x (*.f64 y z)) 4) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 x (*.f64 y z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x (*.f64 y z)) 2) 2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x (*.f64 y z)) 4) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 x (*.f64 y z)) 8) 8)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8)) 16)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8))) 32)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8)))) 64)))) (#(struct:change #<rule egg-rr> (2) ((x not (not (+.f64 x (*.f64 y z))))))) (#(struct:change #<rule egg-rr> (2) ((x and (+.f64 x (*.f64 y z)) (+.f64 x (*.f64 y z)))))) (#(struct:change #<rule egg-rr> (2) ((x or (+.f64 x (*.f64 y z)) (+.f64 x (*.f64 y z)))))))

simplify987.0ms (13.8%)

Algorithm
egg-herbie
Rules
5914×rational.json-simplify-51
1978×rational.json-simplify-35
1696×rational.json-simplify-2
1278×rational.json-simplify-1
1128×rational.json-simplify-49
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
054650
1111650
2281650
3690650
41105650
52508650
63350650
73408650
83438650
93464650
103490650
113516650
123565650
133591650
143617650
153643650
163669650
173695650
183721650
194550650
204922650
214954650
224984650
235013650
245042650
255071650
265100650
275129650
285158650
295187650
305216650
315245650
325274650
335303650
345332650
355361650
365390650
375419650
385448650
395477650
405477650
Stop Event
node limit
Counts
56 → 23
Calls
Call 1
Inputs
(*.f64 y z)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
x
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
x
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
x
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
x
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(-.f64 (+.f64 x (*.f64 y z)) 0)
(*.f64 (+.f64 x (*.f64 y z)) 1)
(*.f64 1 (+.f64 x (*.f64 y z)))
(*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 1/2))
(*.f64 2 (+.f64 (*.f64 x 1/2) (*.f64 y (*.f64 z 1/2))))
(*.f64 (*.f64 (+.f64 x (*.f64 y z)) 2) 1/2)
(*.f64 4 (/.f64 (+.f64 x (*.f64 y z)) 4))
(*.f64 (*.f64 (+.f64 x (*.f64 y z)) 4) 1/4)
(*.f64 1/2 (*.f64 (+.f64 x (*.f64 y z)) 2))
(*.f64 1/2 (+.f64 (*.f64 y (+.f64 z z)) (+.f64 x x)))
(*.f64 (*.f64 (+.f64 x (*.f64 y z)) 1/2) 2)
(*.f64 1/4 (*.f64 (+.f64 x (*.f64 y z)) 4))
(*.f64 (/.f64 (+.f64 x (*.f64 y z)) 4) 4)
(/.f64 (+.f64 x (*.f64 y z)) 1)
(/.f64 (*.f64 (+.f64 x (*.f64 y z)) 2) 2)
(/.f64 (*.f64 (+.f64 x (*.f64 y z)) 4) 4)
(/.f64 (*.f64 (+.f64 x (*.f64 y z)) 8) 8)
(/.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8)) 16)
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8))) 32)
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8)))) 64)
Outputs
(*.f64 y z)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
x
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
x
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
x
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
x
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(+.f64 (*.f64 y z) x)
(-.f64 (+.f64 x (*.f64 y z)) 0)
(+.f64 (*.f64 y z) x)
(*.f64 (+.f64 x (*.f64 y z)) 1)
(+.f64 (*.f64 y z) x)
(*.f64 1 (+.f64 x (*.f64 y z)))
(+.f64 (*.f64 y z) x)
(*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 1/2))
(+.f64 (*.f64 y z) x)
(*.f64 2 (+.f64 (*.f64 x 1/2) (*.f64 y (*.f64 z 1/2))))
(+.f64 (*.f64 y z) x)
(*.f64 (*.f64 (+.f64 x (*.f64 y z)) 2) 1/2)
(+.f64 (*.f64 y z) x)
(*.f64 4 (/.f64 (+.f64 x (*.f64 y z)) 4))
(+.f64 (*.f64 y z) x)
(*.f64 (*.f64 (+.f64 x (*.f64 y z)) 4) 1/4)
(+.f64 (*.f64 y z) x)
(*.f64 1/2 (*.f64 (+.f64 x (*.f64 y z)) 2))
(+.f64 (*.f64 y z) x)
(*.f64 1/2 (+.f64 (*.f64 y (+.f64 z z)) (+.f64 x x)))
(+.f64 (*.f64 y z) x)
(*.f64 (*.f64 (+.f64 x (*.f64 y z)) 1/2) 2)
(+.f64 (*.f64 y z) x)
(*.f64 1/4 (*.f64 (+.f64 x (*.f64 y z)) 4))
(+.f64 (*.f64 y z) x)
(*.f64 (/.f64 (+.f64 x (*.f64 y z)) 4) 4)
(+.f64 (*.f64 y z) x)
(/.f64 (+.f64 x (*.f64 y z)) 1)
(+.f64 (*.f64 y z) x)
(/.f64 (*.f64 (+.f64 x (*.f64 y z)) 2) 2)
(+.f64 (*.f64 y z) x)
(/.f64 (*.f64 (+.f64 x (*.f64 y z)) 4) 4)
(+.f64 (*.f64 y z) x)
(/.f64 (*.f64 (+.f64 x (*.f64 y z)) 8) 8)
(+.f64 (*.f64 y z) x)
(/.f64 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8)) 16)
(+.f64 (*.f64 y z) x)
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8))) 32)
(+.f64 (*.f64 y z) x)
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8))) (*.f64 2 (*.f64 2 (*.f64 (+.f64 x (*.f64 y z)) 8)))) 64)
(+.f64 (*.f64 y z) x)

localize7.0ms (0.1%)

Local error

Found 1 expressions with local error:

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

Compiled 13 to 5 computations (61.5% saved)

eval25.0ms (0.3%)

Compiler

Compiled 1441 to 681 computations (52.7% saved)

prune21.0ms (0.3%)

Pruning

9 alts after pruning (4 fresh and 5 done)

PrunedKeptTotal
New1453148
Fresh011
Picked011
Done145
Total1469155
Error
0b
Counts
155 → 9
Alt Table
Click to see full alt table
StatusErrorProgram
30.0b
(+.f64 (*.f64 y z) (*.f64 y x))
21.7b
(+.f64 (*.f64 y x) x)
0.0b
(+.f64 x (*.f64 y (+.f64 z x)))
11.2b
(+.f64 x (*.f64 y z))
21.7b
(*.f64 (+.f64 1 y) x)
30.0b
(*.f64 y (+.f64 z x))
40.6b
(*.f64 y z)
51.4b
(*.f64 y x)
32.7b
x
Compiler

Compiled 68 to 44 computations (35.3% saved)

localize3.0ms (0%)

Compiler

Compiled 8 to 4 computations (50% saved)

localize5.0ms (0.1%)

Compiler

Compiled 8 to 4 computations (50% saved)

localize6.0ms (0.1%)

Local error

Found 1 expressions with local error:

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

Compiled 19 to 6 computations (68.4% saved)

series1.0ms (0%)

Counts
1 → 18
Calls

9 calls:

TimeVariablePointExpression
0.0ms
y
@0
(+.f64 (*.f64 y z) (*.f64 y x))
0.0ms
y
@inf
(+.f64 (*.f64 y z) (*.f64 y x))
0.0ms
y
@-inf
(+.f64 (*.f64 y z) (*.f64 y x))
0.0ms
z
@inf
(+.f64 (*.f64 y z) (*.f64 y x))
0.0ms
z
@0
(+.f64 (*.f64 y z) (*.f64 y x))

rewrite82.0ms (1.1%)

Algorithm
batch-egg-rewrite
Rules
1306×bool.json-1
1306×bool.json-2
1290×rational.json-simplify-35
1276×rational.json-1
1276×rational.json-2
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0819
18013
222013
348013
499213
5220913
6471613
Stop Event
node limit
Counts
1 → 33
Calls
Call 1
Inputs
(+.f64 (*.f64 y z) (*.f64 y x))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (*.f64 y (+.f64 z x)) 0)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 y (+.f64 z x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 y (+.f64 z x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 y (+.f64 z x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (*.f64 (+.f64 (+.f64 x x) (+.f64 z z)) (*.f64 y 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 2 (*.f64 y (/.f64 (+.f64 z x) 2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 2 (+.f64 (*.f64 (*.f64 y x) 1/2) (*.f64 (*.f64 y z) 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 2 (*.f64 (*.f64 (+.f64 z x) 1/2) y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 y (*.f64 2 (+.f64 z x))) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 y y) (*.f64 (+.f64 z x) 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 y y) (/.f64 (+.f64 z x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 y y) (+.f64 (*.f64 x 1/2) (*.f64 z 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 z x) y)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 4 (/.f64 (*.f64 y (+.f64 z x)) 4))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 4 (*.f64 (+.f64 (*.f64 x 1/2) (*.f64 z 1/2)) (*.f64 y 1/2)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 y (*.f64 (+.f64 z x) 4)) 1/4)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 2 (+.f64 z x)) (*.f64 y 1/2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/2 (*.f64 y (*.f64 2 (+.f64 z x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/2 (+.f64 (*.f64 z (+.f64 y y)) (*.f64 y (+.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 y 1/2) (*.f64 2 (+.f64 z x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 y 1/2) (+.f64 (+.f64 x x) (+.f64 z z)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 y (/.f64 (+.f64 z x) 2)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (*.f64 (+.f64 z x) 1/2) (+.f64 y y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1/4 (*.f64 y (*.f64 (+.f64 z x) 4)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (+.f64 z x) 2) (+.f64 y y))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (/.f64 (*.f64 y (+.f64 z x)) 4) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (+.f64 z x)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (*.f64 2 (+.f64 z x))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (*.f64 (+.f64 z x) 4)) 4)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (*.f64 y (+.f64 z x)) 8) 8)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)) 16)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) 32)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)))) 64)))) (#(struct:change #<rule egg-rr> (2) ((x not (not (*.f64 y (+.f64 z x))))))) (#(struct:change #<rule egg-rr> (2) ((x and (*.f64 y (+.f64 z x)) (*.f64 y (+.f64 z x)))))) (#(struct:change #<rule egg-rr> (2) ((x or (*.f64 y (+.f64 z x)) (*.f64 y (+.f64 z x)))))))

simplify227.0ms (3.2%)

Algorithm
egg-herbie
Rules
2032×rational.json-simplify-2
1754×rational.json-simplify-1
1632×rational.json-simplify-35
1108×rational.json-simplify-41
840×rational.json-simplify-53
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
086651
1194651
2417651
31259651
42529651
53821651
64189651
74391651
84499651
94606651
104765651
115638651
126404651
136957651
Stop Event
node limit
Counts
51 → 36
Calls
Call 1
Inputs
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(*.f64 y x)
(*.f64 y z)
(*.f64 y z)
(*.f64 y z)
(*.f64 y x)
(*.f64 y x)
(-.f64 (*.f64 y (+.f64 z x)) 0)
(*.f64 y (+.f64 z x))
(*.f64 (*.f64 y (+.f64 z x)) 1)
(*.f64 1 (*.f64 y (+.f64 z x)))
(*.f64 1 (*.f64 (+.f64 (+.f64 x x) (+.f64 z z)) (*.f64 y 1/2)))
(*.f64 2 (*.f64 y (/.f64 (+.f64 z x) 2)))
(*.f64 2 (+.f64 (*.f64 (*.f64 y x) 1/2) (*.f64 (*.f64 y z) 1/2)))
(*.f64 2 (*.f64 (*.f64 (+.f64 z x) 1/2) y))
(*.f64 (*.f64 y (*.f64 2 (+.f64 z x))) 1/2)
(*.f64 (+.f64 y y) (*.f64 (+.f64 z x) 1/2))
(*.f64 (+.f64 y y) (/.f64 (+.f64 z x) 2))
(*.f64 (+.f64 y y) (+.f64 (*.f64 x 1/2) (*.f64 z 1/2)))
(*.f64 (+.f64 z x) y)
(*.f64 4 (/.f64 (*.f64 y (+.f64 z x)) 4))
(*.f64 4 (*.f64 (+.f64 (*.f64 x 1/2) (*.f64 z 1/2)) (*.f64 y 1/2)))
(*.f64 (*.f64 y (*.f64 (+.f64 z x) 4)) 1/4)
(*.f64 (*.f64 2 (+.f64 z x)) (*.f64 y 1/2))
(*.f64 1/2 (*.f64 y (*.f64 2 (+.f64 z x))))
(*.f64 1/2 (+.f64 (*.f64 z (+.f64 y y)) (*.f64 y (+.f64 x x))))
(*.f64 (*.f64 y 1/2) (*.f64 2 (+.f64 z x)))
(*.f64 (*.f64 y 1/2) (+.f64 (+.f64 x x) (+.f64 z z)))
(*.f64 (*.f64 y (/.f64 (+.f64 z x) 2)) 2)
(*.f64 (*.f64 (+.f64 z x) 1/2) (+.f64 y y))
(*.f64 1/4 (*.f64 y (*.f64 (+.f64 z x) 4)))
(*.f64 (/.f64 (+.f64 z x) 2) (+.f64 y y))
(*.f64 (/.f64 (*.f64 y (+.f64 z x)) 4) 4)
(/.f64 (*.f64 y (+.f64 z x)) 1)
(/.f64 (*.f64 y (*.f64 2 (+.f64 z x))) 2)
(/.f64 (*.f64 y (*.f64 (+.f64 z x) 4)) 4)
(/.f64 (*.f64 (*.f64 y (+.f64 z x)) 8) 8)
(/.f64 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)) 16)
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) 32)
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)))) 64)
Outputs
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(*.f64 y (+.f64 z x))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(*.f64 y (+.f64 z x))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(*.f64 y (+.f64 z x))
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(*.f64 y (+.f64 z x))
(*.f64 y x)
(*.f64 y z)
(*.f64 y z)
(*.f64 y z)
(*.f64 y x)
(*.f64 y x)
(-.f64 (*.f64 y (+.f64 z x)) 0)
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 z x))
(*.f64 (*.f64 y (+.f64 z x)) 1)
(*.f64 y (+.f64 z x))
(*.f64 1 (*.f64 y (+.f64 z x)))
(*.f64 y (+.f64 z x))
(*.f64 1 (*.f64 (+.f64 (+.f64 x x) (+.f64 z z)) (*.f64 y 1/2)))
(*.f64 y (+.f64 z x))
(*.f64 2 (*.f64 y (/.f64 (+.f64 z x) 2)))
(*.f64 y (+.f64 z x))
(*.f64 2 (+.f64 (*.f64 (*.f64 y x) 1/2) (*.f64 (*.f64 y z) 1/2)))
(*.f64 y (+.f64 z x))
(*.f64 2 (*.f64 (*.f64 (+.f64 z x) 1/2) y))
(*.f64 y (+.f64 z x))
(*.f64 (*.f64 y (*.f64 2 (+.f64 z x))) 1/2)
(*.f64 y (+.f64 z x))
(*.f64 (+.f64 y y) (*.f64 (+.f64 z x) 1/2))
(*.f64 y (+.f64 z x))
(*.f64 (+.f64 y y) (/.f64 (+.f64 z x) 2))
(*.f64 y (+.f64 z x))
(*.f64 (+.f64 y y) (+.f64 (*.f64 x 1/2) (*.f64 z 1/2)))
(*.f64 y (+.f64 z x))
(*.f64 (+.f64 z x) y)
(*.f64 y (+.f64 z x))
(*.f64 4 (/.f64 (*.f64 y (+.f64 z x)) 4))
(*.f64 y (+.f64 z x))
(*.f64 4 (*.f64 (+.f64 (*.f64 x 1/2) (*.f64 z 1/2)) (*.f64 y 1/2)))
(*.f64 y (+.f64 z x))
(*.f64 (*.f64 y (*.f64 (+.f64 z x) 4)) 1/4)
(*.f64 y (+.f64 z x))
(*.f64 (*.f64 2 (+.f64 z x)) (*.f64 y 1/2))
(*.f64 y (+.f64 z x))
(*.f64 1/2 (*.f64 y (*.f64 2 (+.f64 z x))))
(*.f64 y (+.f64 z x))
(*.f64 1/2 (+.f64 (*.f64 z (+.f64 y y)) (*.f64 y (+.f64 x x))))
(*.f64 (*.f64 y 1/2) (*.f64 2 (+.f64 z x)))
(*.f64 y (+.f64 z x))
(*.f64 (*.f64 y 1/2) (+.f64 (+.f64 x x) (+.f64 z z)))
(*.f64 y (+.f64 z x))
(*.f64 (*.f64 y (/.f64 (+.f64 z x) 2)) 2)
(*.f64 y (+.f64 z x))
(*.f64 (*.f64 (+.f64 z x) 1/2) (+.f64 y y))
(*.f64 y (+.f64 z x))
(*.f64 1/4 (*.f64 y (*.f64 (+.f64 z x) 4)))
(*.f64 y (+.f64 z x))
(*.f64 (/.f64 (+.f64 z x) 2) (+.f64 y y))
(*.f64 y (+.f64 z x))
(*.f64 (/.f64 (*.f64 y (+.f64 z x)) 4) 4)
(*.f64 y (+.f64 z x))
(/.f64 (*.f64 y (+.f64 z x)) 1)
(*.f64 y (+.f64 z x))
(/.f64 (*.f64 y (*.f64 2 (+.f64 z x))) 2)
(*.f64 y (+.f64 z x))
(/.f64 (*.f64 y (*.f64 (+.f64 z x) 4)) 4)
(*.f64 y (+.f64 z x))
(/.f64 (*.f64 (*.f64 y (+.f64 z x)) 8) 8)
(*.f64 y (+.f64 z x))
(/.f64 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)) 16)
(*.f64 y (+.f64 z x))
(/.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) 32)
(*.f64 y (+.f64 z x))
(/.f64 (+.f64 (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8))) (*.f64 2 (*.f64 2 (*.f64 (*.f64 y (+.f64 z x)) 8)))) 64)
(*.f64 y (+.f64 z x))

eval6.0ms (0.1%)

Compiler

Compiled 343 to 172 computations (49.9% saved)

prune8.0ms (0.1%)

Pruning

9 alts after pruning (1 fresh and 8 done)

PrunedKeptTotal
New36036
Fresh011
Picked011
Done077
Total36945
Error
0b
Counts
45 → 9
Alt Table
Click to see full alt table
StatusErrorProgram
30.0b
(+.f64 (*.f64 y z) (*.f64 y x))
21.7b
(+.f64 (*.f64 y x) x)
0.0b
(+.f64 x (*.f64 y (+.f64 z x)))
11.2b
(+.f64 x (*.f64 y z))
21.7b
(*.f64 (+.f64 1 y) x)
30.0b
(*.f64 y (+.f64 z x))
40.6b
(*.f64 y z)
51.4b
(*.f64 y x)
32.7b
x
Compiler

Compiled 68 to 44 computations (35.3% saved)

eval0.0ms (0%)

Compiler

Compiled 3 to 3 computations (0% saved)

prune3.0ms (0%)

Pruning

9 alts after pruning (1 fresh and 8 done)

PrunedKeptTotal
New000
Fresh011
Picked000
Done088
Total099
Error
0b
Counts
9 → 9
Alt Table
Click to see full alt table
StatusErrorProgram
30.0b
(+.f64 (*.f64 y z) (*.f64 y x))
21.7b
(+.f64 (*.f64 y x) x)
0.0b
(+.f64 x (*.f64 y (+.f64 z x)))
11.2b
(+.f64 x (*.f64 y z))
21.7b
(*.f64 (+.f64 1 y) x)
30.0b
(*.f64 y (+.f64 z x))
40.6b
(*.f64 y z)
51.4b
(*.f64 y x)
32.7b
x
Compiler

Compiled 68 to 44 computations (35.3% saved)

regimes27.0ms (0.4%)

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

4 calls:

7.0ms
y
6.0ms
z
6.0ms
(+.f64 x (*.f64 y (+.f64 z x)))
6.0ms
x
Results
ErrorSegmentsBranch
0.0b1x
0.0b1y
0.0b1z
0.0b1(+.f64 x (*.f64 y (+.f64 z x)))
Compiler

Compiled 75 to 30 computations (60% saved)

regimes26.0ms (0.4%)

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

4 calls:

7.0ms
z
6.0ms
y
6.0ms
(+.f64 x (*.f64 y (+.f64 z x)))
5.0ms
x
Results
ErrorSegmentsBranch
0.0b1x
0.0b1y
0.0b1z
0.0b1(+.f64 x (*.f64 y (+.f64 z x)))
Compiler

Compiled 66 to 29 computations (56.1% saved)

regimes47.0ms (0.7%)

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

3 calls:

18.0ms
z
14.0ms
y
14.0ms
x
Results
ErrorSegmentsBranch
6.2b3x
0.7b3y
5.6b3z
Compiler

Compiled 42 to 21 computations (50% saved)

bsearch29.0ms (0.4%)

Algorithm
binary-search
Steps
TimeLeftRight
16.0ms
1.708838288419395e-8
842916.2312661392
13.0ms
-86637.3526839423
-156.4910111688476
Results
26.0ms288×body256valid
0.0msbody256infinite
Compiler

Compiled 340 to 227 computations (33.2% saved)

regimes44.0ms (0.6%)

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

3 calls:

15.0ms
z
15.0ms
x
12.0ms
y
Results
ErrorSegmentsBranch
11.2b3x
10.9b3y
14.5b3z
Compiler

Compiled 32 to 19 computations (40.6% saved)

bsearch30.0ms (0.4%)

Algorithm
binary-search
Steps
TimeLeftRight
16.0ms
2.2227052520451843e-42
7.589712745380059e-25
14.0ms
-143.2967135657492
-0.08045070414880505
Results
26.0ms288×body256valid
Compiler

Compiled 340 to 245 computations (27.9% saved)

regimes42.0ms (0.6%)

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

3 calls:

17.0ms
z
14.0ms
x
10.0ms
y
Results
ErrorSegmentsBranch
18.1b3x
10.9b3y
21.7b5z
Compiler

Compiled 27 to 16 computations (40.7% saved)

bsearch31.0ms (0.4%)

Algorithm
binary-search
Steps
TimeLeftRight
16.0ms
2.2227052520451843e-42
7.589712745380059e-25
14.0ms
-7.77910032596869e-16
-1.506572476011561e-23
Results
27.0ms304×body256valid
Compiler

Compiled 282 to 201 computations (28.7% saved)

regimes51.0ms (0.7%)

Counts
3 → 6
Calls
Call 1
Inputs
x
(*.f64 y x)
(*.f64 y z)
Outputs
(*.f64 y z)
(*.f64 y x)
(*.f64 y z)
x
(*.f64 y z)
(*.f64 y x)
Calls

3 calls:

21.0ms
y
18.0ms
z
12.0ms
x
Results
ErrorSegmentsBranch
22.3b3x
17.1b6y
24.3b5z
Compiler

Compiled 22 to 14 computations (36.4% saved)

bsearch74.0ms (1%)

Algorithm
binary-search
Steps
TimeLeftRight
15.0ms
6.346918609031283e+67
9.750730747502258e+70
16.0ms
2.2227052520451843e-42
7.589712745380059e-25
15.0ms
-7.77910032596869e-16
-1.506572476011561e-23
11.0ms
-2.0570577727975525e+66
-4.5709640975076345e+65
16.0ms
-1.0107466390064388e+83
-6.850611287639263e+80
Results
60.0ms640×body256valid
6.0ms71×body256infinite
Compiler

Compiled 538 to 392 computations (27.1% saved)

regimes20.0ms (0.3%)

Accuracy

Total -39.5b remaining (-176.4%)

Threshold costs -39.5b (-176.4%)

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

3 calls:

8.0ms
z
8.0ms
y
3.0ms
x
Results
ErrorSegmentsBranch
32.7b1x
22.4b3y
31.5b3z
Compiler

Compiled 19 to 13 computations (31.6% saved)

bsearch18.0ms (0.2%)

Algorithm
binary-search
Steps
TimeLeftRight
16.0ms
1.708838288419395e-8
842916.2312661392
2.0ms
-156.4910111688476
-143.2967135657492
Results
15.0ms176×body256valid
0.0msbody256infinite
Compiler

Compiled 148 to 110 computations (25.7% saved)

simplify5.0ms (0.1%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
055318
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 z x)))
(if (<=.f64 y -160) (*.f64 y (+.f64 z x)) (if (<=.f64 y 1) (+.f64 x (*.f64 y z)) (*.f64 y (+.f64 z x))))
(if (<=.f64 y -7/2) (*.f64 y (+.f64 z x)) (if (<=.f64 y 66355061549583/340282366920938463463374607431768211456) (*.f64 (+.f64 1 y) x) (*.f64 y (+.f64 z x))))
(if (<=.f64 y -7463926734143815/81129638414606681695789005144064) (*.f64 y (+.f64 z x)) (if (<=.f64 y 8278036617694567/1427247692705959881058285969449495136382746624) x (*.f64 y (+.f64 z x))))
(if (<=.f64 y -2199999999999999868945052437887596711425318221398377401540034253290385628270166016) (*.f64 y z) (if (<=.f64 y -729999999999999973180358394305525088873058097253406841123219963904) (*.f64 y x) (if (<=.f64 y -1713457963316493/5192296858534827628530496329220096) (*.f64 y z) (if (<=.f64 y 4573395011417413/10889035741470030830827987437816582766592) x (if (<=.f64 y 480000000000000015658895202310422131076681877251465743414501847334912) (*.f64 y z) (*.f64 y x))))))
(if (<=.f64 y -145) (*.f64 y x) (if (<=.f64 y 1) x (*.f64 y x)))
x
Outputs
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(+.f64 x (*.f64 y (+.f64 z x)))
(if (<=.f64 y -160) (*.f64 y (+.f64 z x)) (if (<=.f64 y 1) (+.f64 x (*.f64 y z)) (*.f64 y (+.f64 z x))))
(if (<=.f64 y -7/2) (*.f64 y (+.f64 z x)) (if (<=.f64 y 66355061549583/340282366920938463463374607431768211456) (*.f64 (+.f64 1 y) x) (*.f64 y (+.f64 z x))))
(if (<=.f64 y -7463926734143815/81129638414606681695789005144064) (*.f64 y (+.f64 z x)) (if (<=.f64 y 8278036617694567/1427247692705959881058285969449495136382746624) x (*.f64 y (+.f64 z x))))
(if (<=.f64 y -2199999999999999868945052437887596711425318221398377401540034253290385628270166016) (*.f64 y z) (if (<=.f64 y -729999999999999973180358394305525088873058097253406841123219963904) (*.f64 y x) (if (<=.f64 y -1713457963316493/5192296858534827628530496329220096) (*.f64 y z) (if (<=.f64 y 4573395011417413/10889035741470030830827987437816582766592) x (if (<=.f64 y 480000000000000015658895202310422131076681877251465743414501847334912) (*.f64 y z) (*.f64 y x))))))
(if (<=.f64 y -145) (*.f64 y x) (if (<=.f64 y 1) x (*.f64 y x)))
x
Compiler

Compiled 157 to 84 computations (46.5% saved)

soundness0.0ms (0%)

end53.0ms (0.7%)

Compiler

Compiled 136 to 53 computations (61% saved)

Profiling

Loading profile data...