Details

Time bar (total: 3.8s)

analyze261.0ms (6.9%)

Algorithm
search
Search
TrueOtherFalseIter
0%99.9%0.1%0
0%99.9%0.1%1
0%99.9%0.1%2
0%99.9%0.1%3
0%99.9%0.1%4
0%99.9%0.1%5
0%99.9%0.1%6
12.5%87.4%0.1%7
18.7%81.1%0.1%8
25%72.5%2.5%9
34.3%59.3%6.4%10
40.6%51.3%8.1%11
46.8%43.2%10%12
Compiler

Compiled 11 to 7 computations (36.4% saved)

sample1.4s (37.7%)

Results
1.2s8256×body256valid
172.0ms1147×body256invalid

preprocess39.0ms (1%)

Algorithm
egg-herbie
Rules
188×fma-def_binary64
24×+-commutative_binary64
22×distribute-rgt-in_binary64
18×*-commutative_binary64
16×associate-+l+_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01640
14232
213032
318132
420032
522632
625032
732232
839532
941432
1041832
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)))
(fma.f64 y (+.f64 x z) x)
(+.f64 y (*.f64 x (+.f64 z y)))
(+.f64 y (*.f64 x (+.f64 y z)))
(fma.f64 x (+.f64 y z) y)
(+.f64 z (*.f64 y (+.f64 x z)))
(fma.f64 y (+.f64 x z) z)
(+.f64 x (*.f64 z (+.f64 y x)))
(+.f64 x (*.f64 z (+.f64 x y)))
(fma.f64 z (+.f64 x y) x)
Compiler

Compiled 13 to 9 computations (30.8% saved)

simplify17.0ms (0.5%)

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

Useful iterations: 1 (0.0ms)

IterNodesCost
0710
1168
2358
3508
4598
5668
6728
7918
81078
91218
101398
111468
121478
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)))
(fma.f64 y (+.f64 x z) x)

eval1.0ms (0%)

Compiler

Compiled 16 to 8 computations (50% 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
(fma.f64 y (+.f64 x z) x)
0.0b
(+.f64 x (*.f64 y (+.f64 z x)))
Compiler

Compiled 19 to 11 computations (42.1% saved)

localize13.0ms (0.3%)

Local error

Found 2 expressions with local error:

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

Compiled 21 to 6 computations (71.4% saved)

series13.0ms (0.3%)

Counts
2 → 60
Calls

18 calls:

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

rewrite92.0ms (2.4%)

Algorithm
batch-egg-rewrite
Rules
620×unpow-prod-down_binary64
444×fma-def_binary64
429×log-prod_binary64
348×pow-prod-down_binary64
234×pow2_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0717
116315
2259515
Stop Event
node limit
Counts
2 → 141
Calls
Call 1
Inputs
(+.f64 x (*.f64 y (+.f64 z x)))
(*.f64 y (+.f64 z x))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (fma.f64 y (+.f64 x z) x))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (*.f64 x x) (-.f64 x (*.f64 y (+.f64 x z)))) (/.f64 (pow.f64 (*.f64 y (+.f64 x z)) 2) (-.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (fma.f64 y (+.f64 x z) x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 1 (fma.f64 y (+.f64 x z) x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (cbrt.f64 (fma.f64 y (+.f64 x z) x)) (pow.f64 (cbrt.f64 (fma.f64 y (+.f64 x z) x)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (fma.f64 y (+.f64 x z) x)) 2) (cbrt.f64 (fma.f64 y (+.f64 x z) x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (fma.f64 y (+.f64 x z) x)) (sqrt.f64 (fma.f64 y (+.f64 x z) x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3)) (/.f64 1 (fma.f64 (*.f64 y (+.f64 x z)) (fma.f64 y (+.f64 x z) (neg.f64 x)) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3)) (pow.f64 (/.f64 1 (fma.f64 (*.f64 y (+.f64 x z)) (fma.f64 y (+.f64 x z) (neg.f64 x)) (*.f64 x x))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (*.f64 x x) (pow.f64 (*.f64 y (+.f64 x z)) 2)) (/.f64 1 (-.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (*.f64 x x) (pow.f64 (*.f64 y (+.f64 x z)) 2)) (pow.f64 (/.f64 1 (-.f64 x (*.f64 y (+.f64 x z)))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 1 1/3) (fma.f64 y (+.f64 x z) x))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (pow.f64 (fma.f64 y (+.f64 x z) x) 3)) 1/3) (pow.f64 (sqrt.f64 (pow.f64 (fma.f64 y (+.f64 x z) x) 3)) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (*.f64 (fma.f64 y (+.f64 x z) x) (cbrt.f64 (fma.f64 y (+.f64 x z) x))) 2) 1/3) (cbrt.f64 (cbrt.f64 (fma.f64 y (+.f64 x z) x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (fma.f64 y (+.f64 x z) x) 5/2) 1/3) (cbrt.f64 (sqrt.f64 (fma.f64 y (+.f64 x z) x))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (pow.f64 (cbrt.f64 (cbrt.f64 (fma.f64 y (+.f64 x z) x))) 2) 3) (cbrt.f64 (fma.f64 y (+.f64 x z) x)))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (sqrt.f64 (cbrt.f64 (fma.f64 y (+.f64 x z) x))) 3) (pow.f64 (sqrt.f64 (cbrt.f64 (fma.f64 y (+.f64 x z) x))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 (*.f64 y (+.f64 x z)) (fma.f64 y (+.f64 x z) (neg.f64 x)) (*.f64 x x)) (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 x (*.f64 y (+.f64 x z))) (-.f64 (*.f64 x x) (pow.f64 (*.f64 y (+.f64 x z)) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3)) (fma.f64 (*.f64 y (+.f64 x z)) (fma.f64 y (+.f64 x z) (neg.f64 x)) (*.f64 x x)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3)) (+.f64 (pow.f64 (*.f64 y (+.f64 x z)) 2) (-.f64 (*.f64 x x) (*.f64 (*.f64 x y) (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 x x) (pow.f64 (*.f64 y (+.f64 x z)) 2)) (-.f64 x (*.f64 y (+.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3))) (neg.f64 (fma.f64 (*.f64 y (+.f64 x z)) (fma.f64 y (+.f64 x z) (neg.f64 x)) (*.f64 x x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (*.f64 x x) (pow.f64 (*.f64 y (+.f64 x z)) 2))) (neg.f64 (-.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 y (+.f64 x z)) 2) (*.f64 x x)) (fma.f64 y (+.f64 x z) (neg.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (fma.f64 y (+.f64 x z) x) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 y (+.f64 x z) x) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (fma.f64 y (+.f64 x z) x) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (fma.f64 y (+.f64 x z) x)) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (fma.f64 y (+.f64 x z) x)) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (fma.f64 (*.f64 y (+.f64 x z)) (fma.f64 y (+.f64 x z) (neg.f64 x)) (*.f64 x x)) (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (/.f64 (-.f64 x (*.f64 y (+.f64 x z))) (-.f64 (*.f64 x x) (pow.f64 (*.f64 y (+.f64 x z)) 2))) -1)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (fma.f64 y (+.f64 x z) x) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (fma.f64 y (+.f64 x z) x)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (fma.f64 y (+.f64 x z) x))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 x)) (pow.f64 (exp.f64 y) (+.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (exp.f64 x) (+.f64 1 (expm1.f64 (*.f64 y (+.f64 x z))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 x)) (+.f64 1 (expm1.f64 (*.f64 y (+.f64 x z))))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 y (+.f64 x z)))) (exp.f64 x)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (pow.f64 (exp.f64 y) (+.f64 x z)) (+.f64 1 (expm1.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (*.f64 (+.f64 1 (expm1.f64 (*.f64 y (+.f64 x z)))) (+.f64 1 (expm1.f64 x))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (fma.f64 y (+.f64 x z) x) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (fma.f64 y (+.f64 x z) x)))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (fma.f64 y (+.f64 x z) x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (fma.f64 y (+.f64 x z) x)))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (fma.f64 y (+.f64 x z) x)) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (fma.f64 y (+.f64 x z) x))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (fma.f64 y (+.f64 x z) x))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (fma.f64 y (+.f64 x z) x))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (fma.f64 y (+.f64 x z) x)) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x 1 (*.f64 y (+.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 y z (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 y (+.f64 x z) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 z y (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (+.f64 x z) y x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (+.f64 x z)) 1 x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 x (*.f64 y (+.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 y (+.f64 x z)) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 y z) (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 (*.f64 y (+.f64 x z))) (pow.f64 (cbrt.f64 (*.f64 y (+.f64 x z))) 2) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 y (+.f64 x z))) 2) (cbrt.f64 (*.f64 y (+.f64 x z))) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 y) 2) (*.f64 (cbrt.f64 y) (+.f64 x z)) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 y) 2) (*.f64 (cbrt.f64 y) z) (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (+.f64 x z)) 2) (*.f64 (cbrt.f64 (+.f64 x z)) y) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (cbrt.f64 x) (pow.f64 (cbrt.f64 x) 2) (*.f64 y (+.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 x) 2) (cbrt.f64 x) (*.f64 y (+.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) y) (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 y (+.f64 x z))) (sqrt.f64 (*.f64 y (+.f64 x z))) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 y) (*.f64 (sqrt.f64 y) (+.f64 x z)) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 y) (*.f64 (sqrt.f64 y) z) (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (+.f64 x z)) (*.f64 (sqrt.f64 (+.f64 x z)) y) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 x) (sqrt.f64 x) (*.f64 y (+.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 z) (*.f64 (sqrt.f64 z) y) (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 y z)) 2) (cbrt.f64 (*.f64 y z)) (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 y z)) (sqrt.f64 (*.f64 y z)) (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (pow.f64 (cbrt.f64 y) 2)) (cbrt.f64 y) (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (sqrt.f64 y)) (sqrt.f64 y) (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (pow.f64 (cbrt.f64 (+.f64 x z)) 2)) (cbrt.f64 (+.f64 x z)) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (sqrt.f64 (+.f64 x z))) (sqrt.f64 (+.f64 x z)) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (+.f64 x z) (pow.f64 (cbrt.f64 y) 2)) (cbrt.f64 y) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 (+.f64 x z) (sqrt.f64 y)) (sqrt.f64 y) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (pow.f64 (cbrt.f64 z) 2)) (cbrt.f64 z) (fma.f64 x y x))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (sqrt.f64 z)) (sqrt.f64 z) (fma.f64 x y x))))))
((#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 y z) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 x y) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 0 (*.f64 y (+.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (*.f64 (*.f64 y z) 1) (*.f64 (*.f64 x y) 1))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (pow.f64 (cbrt.f64 (pow.f64 (exp.f64 y) (+.f64 x z))) 2)) (log.f64 (cbrt.f64 (pow.f64 (exp.f64 y) (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x +.f64 (log.f64 (sqrt.f64 (pow.f64 (exp.f64 y) (+.f64 x z)))) (log.f64 (sqrt.f64 (pow.f64 (exp.f64 y) (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (exp.f64 (log1p.f64 (*.f64 y (+.f64 x z)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 (*.f64 y z) 3) (pow.f64 (*.f64 x y) 3)) (+.f64 (pow.f64 (*.f64 y z) 2) (-.f64 (pow.f64 (*.f64 x y) 2) (*.f64 (*.f64 y z) (*.f64 x y)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 y z) 2) (pow.f64 (*.f64 x y) 2)) (-.f64 (*.f64 y z) (*.f64 x y)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (+.f64 (pow.f64 z 3) (pow.f64 x 3)) y) (fma.f64 x (-.f64 x z) (*.f64 z z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 (-.f64 (*.f64 z z) (*.f64 x x)) y) (-.f64 z x))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (+.f64 (pow.f64 z 3) (pow.f64 x 3))) (fma.f64 x (-.f64 x z) (*.f64 z z)))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (*.f64 y (-.f64 (*.f64 z z) (*.f64 x x))) (-.f64 z x))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (*.f64 y (+.f64 x z)) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 y (+.f64 x z)) 2) 1/2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (*.f64 y (+.f64 x z))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (*.f64 y (+.f64 x z))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (*.f64 y (+.f64 x z)) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (*.f64 y (+.f64 x z)) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (pow.f64 (exp.f64 y) (+.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (+.f64 1 (expm1.f64 (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (*.f64 y (+.f64 x z)) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (*.f64 y (+.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (*.f64 y (+.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (*.f64 y (+.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (*.f64 y (+.f64 x z))) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (cbrt.f64 (*.f64 y (+.f64 x z)))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (log.f64 (sqrt.f64 (*.f64 y (+.f64 x z)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 3 (log.f64 (*.f64 y (+.f64 x z)))) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 y (+.f64 x z))) 1) 1))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (*.f64 (*.f64 (log.f64 (*.f64 y (+.f64 x z))) 3) 1/3))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 x y (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 y x (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 y z (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 z y (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 y z) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 x y) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 y) 2) (*.f64 (cbrt.f64 y) z) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 y) 2) (*.f64 (cbrt.f64 y) x) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 x) 2) (*.f64 (cbrt.f64 x) y) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 z) 2) (*.f64 (cbrt.f64 z) y) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 y) (*.f64 (sqrt.f64 y) z) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 y) (*.f64 (sqrt.f64 y) x) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) y) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 z) (*.f64 (sqrt.f64 z) y) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y z) 1 (*.f64 (*.f64 x y) 1))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 y z)) 2) (cbrt.f64 (*.f64 y z)) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 x y)) 2) (cbrt.f64 (*.f64 x y)) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 y z)) (sqrt.f64 (*.f64 y z)) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 x y)) (sqrt.f64 (*.f64 x y)) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (pow.f64 (cbrt.f64 y) 2)) (cbrt.f64 y) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 z (sqrt.f64 y)) (sqrt.f64 y) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (pow.f64 (cbrt.f64 z) 2)) (cbrt.f64 z) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (sqrt.f64 z)) (sqrt.f64 z) (*.f64 x y))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (pow.f64 (cbrt.f64 x) 2)) (cbrt.f64 x) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 y (sqrt.f64 x)) (sqrt.f64 x) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 x (pow.f64 (cbrt.f64 y) 2)) (cbrt.f64 y) (*.f64 y z))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (*.f64 x (sqrt.f64 y)) (sqrt.f64 y) (*.f64 y z))))))

simplify51.0ms (1.3%)

Algorithm
egg-herbie
Rules
310×fma-neg_binary64
256×fma-def_binary64
77×cancel-sign-sub-inv_binary64
62×distribute-rgt-in_binary64
46×unsub-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
022408
154408
2104408
3204408
4351408
5660408
61093408
71408408
81432408
Stop Event
saturated
Counts
201 → 155
Calls
Call 1
Inputs
(*.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 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))
Outputs
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(*.f64 (+.f64 1 y) x)
(fma.f64 y x x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(fma.f64 y x x)
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(fma.f64 y (+.f64 z x) x)
x
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(*.f64 y z)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(*.f64 y z)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(*.f64 y x)
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(*.f64 y x)
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(*.f64 y x)
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y z) (*.f64 y x))
(*.f64 y (+.f64 z x))

localize6.0ms (0.2%)

Local error

Found 1 expressions with local error:

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

Compiled 15 to 5 computations (66.7% saved)

series4.0ms (0.1%)

Counts
1 → 36
Calls

9 calls:

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

rewrite48.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
730×pow1_binary64
677×add-log-exp_binary64
677×log1p-expm1-u_binary64
677×expm1-log1p-u_binary64
661×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify39.0ms (1%)

Algorithm
egg-herbie
Rules
318×fma-neg_binary64
256×fma-def_binary64
81×cancel-sign-sub-inv_binary64
63×distribute-rgt-in_binary64
46×unsub-neg_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
021258
152258
2101258
3202258
4349258
5659258
61099258
71423258
81447258
Stop Event
saturated
Counts
57 → 34
Calls
Call 1
Inputs
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 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 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))
Outputs
x
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 x z) x)
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 x z) x)
(*.f64 y (+.f64 z x))
(*.f64 y (+.f64 x z))
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 x z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 x z) x)
(*.f64 (+.f64 1 y) x)
(fma.f64 y x x)
(fma.f64 x y x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 x z) x)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(fma.f64 y x x)
(fma.f64 x y x)
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 x z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 x z) x)
(*.f64 y z)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 x z) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 x z) x)

eval34.0ms (0.9%)

Compiler

Compiled 2338 to 693 computations (70.4% saved)

prune33.0ms (0.9%)

Pruning

7 alts after pruning (6 fresh and 1 done)

PrunedKeptTotal
New1836189
Fresh000
Picked101
Done011
Total1847191
Error
0b
Counts
191 → 7
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(+.f64 x (*.f64 y (+.f64 z x)))
34.6b
x
22.4b
(+.f64 (*.f64 y x) x)
22.4b
(*.f64 (+.f64 1 y) x)
0.0b
(+.f64 x (fma.f64 y x (*.f64 y z)))
40.3b
(*.f64 y z)
27.9b
(*.f64 y (+.f64 z x))
Compiler

Compiled 96 to 61 computations (36.5% saved)

localize8.0ms (0.2%)

Local error

Found 1 expressions with local error:

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

Compiled 23 to 6 computations (73.9% saved)

series4.0ms (0.1%)

Counts
1 → 36
Calls

9 calls:

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

rewrite54.0ms (1.4%)

Algorithm
batch-egg-rewrite
Rules
835×pow1_binary64
773×add-log-exp_binary64
773×log1p-expm1-u_binary64
773×expm1-log1p-u_binary64
755×add-exp-log_binary64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0711
114910
2205110
Stop Event
node limit
Counts
1 → 33
Calls
Call 1
Inputs
(+.f64 x (fma.f64 y x (*.f64 y z)))
Outputs
((#(struct:change #<rule egg-rr> (2) ((x -.f64 (+.f64 1 (+.f64 x (*.f64 y (+.f64 x z)))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x -.f64 (/.f64 (*.f64 x x) (-.f64 x (*.f64 y (+.f64 x z)))) (/.f64 (pow.f64 (*.f64 y (+.f64 x z)) 2) (-.f64 x (*.f64 y (+.f64 x z)))))))) (#(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 (cbrt.f64 (+.f64 x (*.f64 y (+.f64 x z)))) (pow.f64 (cbrt.f64 (+.f64 x (*.f64 y (+.f64 x z)))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (pow.f64 (cbrt.f64 (+.f64 x (*.f64 y (+.f64 x z)))) 2) (cbrt.f64 (+.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (sqrt.f64 (+.f64 x (*.f64 y (+.f64 x z)))) (sqrt.f64 (+.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3)) (/.f64 1 (fma.f64 x x (*.f64 (*.f64 y (+.f64 x z)) (-.f64 (*.f64 y (+.f64 x z)) x)))))))) (#(struct:change #<rule egg-rr> (2) ((x *.f64 (-.f64 (*.f64 x x) (pow.f64 (*.f64 y (+.f64 x z)) 2)) (/.f64 1 (-.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (fma.f64 x x (*.f64 (*.f64 y (+.f64 x z)) (-.f64 (*.f64 y (+.f64 x z)) x))) (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 1 (/.f64 (-.f64 x (*.f64 y (+.f64 x z))) (-.f64 (*.f64 x x) (pow.f64 (*.f64 y (+.f64 x z)) 2))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3)) (fma.f64 x x (*.f64 (*.f64 y (+.f64 x z)) (-.f64 (*.f64 y (+.f64 x z)) x))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3)) (+.f64 (pow.f64 (*.f64 y (+.f64 x z)) 2) (-.f64 (*.f64 x x) (*.f64 x (*.f64 y (+.f64 x z))))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (*.f64 x x) (pow.f64 (*.f64 y (+.f64 x z)) 2)) (-.f64 x (*.f64 y (+.f64 x z))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (+.f64 (pow.f64 x 3) (pow.f64 (*.f64 y (+.f64 x z)) 3))) (neg.f64 (fma.f64 x x (*.f64 (*.f64 y (+.f64 x z)) (-.f64 (*.f64 y (+.f64 x z)) x)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (neg.f64 (-.f64 (*.f64 x x) (pow.f64 (*.f64 y (+.f64 x z)) 2))) (neg.f64 (-.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x /.f64 (-.f64 (pow.f64 (*.f64 y (+.f64 x z)) 2) (*.f64 x x)) (-.f64 (*.f64 y (+.f64 x z)) x))))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (+.f64 x (*.f64 y (+.f64 x z))) 1)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (pow.f64 (+.f64 x (*.f64 y (+.f64 x z))) 3) 1/3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (cbrt.f64 (+.f64 x (*.f64 y (+.f64 x z)))) 3)))) (#(struct:change #<rule egg-rr> (2) ((x pow.f64 (sqrt.f64 (+.f64 x (*.f64 y (+.f64 x z)))) 2)))) (#(struct:change #<rule egg-rr> (2) ((x sqrt.f64 (pow.f64 (+.f64 x (*.f64 y (+.f64 x z))) 2))))) (#(struct:change #<rule egg-rr> (2) ((x log.f64 (exp.f64 (+.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x cbrt.f64 (pow.f64 (+.f64 x (*.f64 y (+.f64 x z))) 3))))) (#(struct:change #<rule egg-rr> (2) ((x expm1.f64 (log1p.f64 (+.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x log1p.f64 (expm1.f64 (+.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x exp.f64 (log.f64 (+.f64 x (*.f64 y (+.f64 x z)))))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 x (*.f64 y (+.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 1 (*.f64 y (+.f64 x z)) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 (*.f64 y (+.f64 x z))) 2) (cbrt.f64 (*.f64 y (+.f64 x z))) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (pow.f64 (cbrt.f64 x) 2) (cbrt.f64 x) (*.f64 y (+.f64 x z)))))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 (*.f64 y (+.f64 x z))) (sqrt.f64 (*.f64 y (+.f64 x z))) x)))) (#(struct:change #<rule egg-rr> (2) ((x fma.f64 (sqrt.f64 x) (sqrt.f64 x) (*.f64 y (+.f64 x z)))))))

simplify40.0ms (1%)

Algorithm
egg-herbie
Rules
307×fma-neg_binary64
273×fma-def_binary64
47×unsub-neg_binary64
43×distribute-rgt-in_binary64
43×cancel-sign-sub-inv_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
027258
177258
2180258
3354258
4816258
51149258
61243258
71249258
Stop Event
saturated
Counts
69 → 47
Calls
Call 1
Inputs
(*.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 -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 (*.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))
Outputs
(*.f64 y z)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(*.f64 (+.f64 1 y) x)
(fma.f64 y x x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 (+.f64 1 y) x))
(fma.f64 y (+.f64 z x) x)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(fma.f64 y x x)
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x)))
(fma.f64 y (+.f64 z x) x)
x
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y (+.f64 z x)) x)
(fma.f64 y (+.f64 z x) x)
(*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x))))
(*.f64 y (+.f64 z x))
(+.f64 (*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x)))) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x)))) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 -1 (*.f64 y (+.f64 (*.f64 -1 z) (*.f64 -1 x)))) x)
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(*.f64 y z)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(*.f64 y z)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)
(+.f64 (*.f64 y z) (+.f64 (*.f64 y x) x))
(fma.f64 y (+.f64 z x) x)

localize3.0ms (0.1%)

Compiler

Compiled 8 to 4 computations (50% saved)

localize6.0ms (0.2%)

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)

localize6.0ms (0.2%)

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)

series3.0ms (0.1%)

Counts
1 → 12
Calls

6 calls:

TimeVariablePointExpression
0.0ms
x
@inf
(*.f64 (+.f64 1 y) x)
0.0ms
y
@0
(*.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)

rewrite47.0ms (1.2%)

Algorithm
batch-egg-rewrite
Rules
604×pow1_binary64
560×add-log-exp_binary64
560×log1p-expm1-u_binary64
560×expm1-log1p-u_binary64
549×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify10.0ms (0.3%)

Algorithm
egg-herbie
Rules
14×fma-def_binary64
associate-*r*_binary64
associate-*l*_binary64
*-lft-identity_binary64
*-rgt-identity_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0554
11154
21654
32254
42854
54154
64554
74754
Stop Event
saturated
Counts
31 → 23
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)
Outputs
x
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)
(*.f64 y x)
(*.f64 x y)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)
(*.f64 y x)
(*.f64 x y)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)
(+.f64 (*.f64 y x) x)
(fma.f64 y x x)
(fma.f64 x y x)

localize5.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)

series2.0ms (0.1%)

Counts
1 → 15
Calls

6 calls:

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

rewrite50.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
633×pow1_binary64
590×add-log-exp_binary64
589×log1p-expm1-u_binary64
589×expm1-log1p-u_binary64
577×add-exp-log_binary64
Iterations

Useful iterations: 0 (0.0ms)

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

simplify17.0ms (0.5%)

Algorithm
egg-herbie
Rules
66×fma-def_binary64
53×fma-neg_binary64
20×unsub-neg_binary64
16×distribute-lft-in_binary64
16×distribute-rgt-in_binary64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
01293
12793
25869
313969
423669
533469
639469
Stop Event
saturated
Counts
55 → 45
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))
Outputs
x
(*.f64 y x)
(*.f64 x y)
(*.f64 y x)
(*.f64 x y)
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 (+.f64 1 y) x)
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)
(*.f64 -1 (*.f64 (-.f64 (*.f64 -1 y) 1) x))
(*.f64 x (+.f64 y 1))
(fma.f64 x y x)

eval33.0ms (0.9%)

Compiler

Compiled 1894 to 630 computations (66.7% saved)

prune27.0ms (0.7%)

Pruning

8 alts after pruning (3 fresh and 5 done)

PrunedKeptTotal
New1723175
Fresh101
Picked011
Done145
Total1748182
Error
0b
Counts
182 → 8
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(+.f64 x (*.f64 y (+.f64 z x)))
27.9b
(fma.f64 y x (*.f64 y z))
22.4b
(+.f64 (*.f64 y x) x)
34.6b
x
40.3b
(*.f64 y z)
22.4b
(*.f64 (+.f64 1 y) x)
50.0b
(*.f64 y x)
27.9b
(*.f64 y (+.f64 z x))
Compiler

Compiled 59 to 38 computations (35.6% saved)

localize3.0ms (0.1%)

Compiler

Compiled 8 to 4 computations (50% saved)

localize6.0ms (0.2%)

Compiler

Compiled 15 to 5 computations (66.7% saved)

eval0.0ms (0%)

Compiler

Compiled 3 to 3 computations (0% saved)

prune3.0ms (0.1%)

Pruning

8 alts after pruning (1 fresh and 7 done)

PrunedKeptTotal
New000
Fresh011
Picked011
Done066
Total088
Error
0b
Counts
8 → 8
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(+.f64 x (*.f64 y (+.f64 z x)))
27.9b
(fma.f64 y x (*.f64 y z))
22.4b
(+.f64 (*.f64 y x) x)
34.6b
x
40.3b
(*.f64 y z)
22.4b
(*.f64 (+.f64 1 y) x)
50.0b
(*.f64 y x)
27.9b
(*.f64 y (+.f64 z x))
Compiler

Compiled 59 to 38 computations (35.6% saved)

eval0.0ms (0%)

Compiler

Compiled 3 to 3 computations (0% saved)

prune3.0ms (0.1%)

Pruning

8 alts after pruning (1 fresh and 7 done)

PrunedKeptTotal
New000
Fresh011
Picked000
Done077
Total088
Error
0b
Counts
8 → 8
Alt Table
Click to see full alt table
StatusErrorProgram
0.0b
(+.f64 x (*.f64 y (+.f64 z x)))
27.9b
(fma.f64 y x (*.f64 y z))
22.4b
(+.f64 (*.f64 y x) x)
34.6b
x
40.3b
(*.f64 y z)
22.4b
(*.f64 (+.f64 1 y) x)
50.0b
(*.f64 y x)
27.9b
(*.f64 y (+.f64 z x))
Compiler

Compiled 59 to 38 computations (35.6% saved)

regimes30.0ms (0.8%)

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

4 calls:

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

Compiled 75 to 31 computations (58.7% saved)

regimes26.0ms (0.7%)

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

4 calls:

6.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 61 to 28 computations (54.1% saved)

regimes76.0ms (2%)

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

3 calls:

39.0ms
x
18.0ms
y
18.0ms
z
Results
ErrorSegmentsBranch
9.8b9x
10.8b3y
12.3b3z
Compiler

Compiled 38 to 20 computations (47.4% saved)

bsearch134.0ms (3.5%)

Algorithm
binary-search
Steps
TimeLeftRight
17.0ms
2.1162337836756516e-94
8.489843489120382e-94
17.0ms
5.826406806563832e-113
2.7545176868118093e-104
16.0ms
3.0261044064660438e-146
3.653531627851486e-140
17.0ms
1.6058251208622737e-272
6.1887233014472754e-263
16.0ms
1.6198227273489558e-295
1.4556160307037816e-281
17.0ms
-1.0916380404557543e-159
-5.57946375248421e-162
17.0ms
-8.546836918470571e-134
-2.706760632377914e-134
16.0ms
-2.703928104080096e-10
-3.096090310677828e-15
Compiler

Compiled 16 to 11 computations (31.3% saved)

regimes70.0ms (1.9%)

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

3 calls:

34.0ms
x
23.0ms
y
12.0ms
z
Results
ErrorSegmentsBranch
13.7b7x
18.7b5y
15.0b3z
Compiler

Compiled 33 to 18 computations (45.5% saved)

bsearch101.0ms (2.7%)

Algorithm
binary-search
Steps
TimeLeftRight
16.0ms
3.0261044064660438e-146
3.653531627851486e-140
17.0ms
1.6058251208622737e-272
6.1887233014472754e-263
16.0ms
1.6198227273489558e-295
1.4556160307037816e-281
17.0ms
-1.0916380404557543e-159
-5.57946375248421e-162
17.0ms
-8.546836918470571e-134
-2.706760632377914e-134
16.0ms
-5.704215073701326e-62
-1.0873455866456134e-63
Compiler

Compiled 16 to 11 computations (31.3% saved)

regimes66.0ms (1.7%)

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

3 calls:

32.0ms
x
20.0ms
y
12.0ms
z
Results
ErrorSegmentsBranch
13.7b7x
18.7b5y
15.0b3z
Compiler

Compiled 28 to 15 computations (46.4% saved)

bsearch100.0ms (2.6%)

Algorithm
binary-search
Steps
TimeLeftRight
17.0ms
3.0261044064660438e-146
3.653531627851486e-140
16.0ms
1.6058251208622737e-272
6.1887233014472754e-263
17.0ms
1.6198227273489558e-295
1.4556160307037816e-281
16.0ms
-1.0916380404557543e-159
-5.57946375248421e-162
17.0ms
-8.546836918470571e-134
-2.706760632377914e-134
17.0ms
-5.704215073701326e-62
-1.0873455866456134e-63
Compiler

Compiled 16 to 11 computations (31.3% saved)

regimes92.0ms (2.4%)

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

3 calls:

44.0ms
x
26.0ms
y
21.0ms
z
Results
ErrorSegmentsBranch
19.9b13x
19.1b5y
22.9b5z
Compiler

Compiled 23 to 14 computations (39.1% saved)

bsearch318.0ms (8.4%)

Algorithm
binary-search
Steps
TimeLeftRight
190.0ms
1.3959477504255285e+38
9.011594183462262e+44
32.0ms
6.111596886788274e-56
1.3139205147708352e-50
32.0ms
-1141135824.9214814
-1.4700716984102963e-5
63.0ms
-1.4864300659283053e+101
-2.1335943585107549e+96
Compiler

Compiled 268 to 191 computations (28.7% saved)

regimes81.0ms (2.1%)

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

3 calls:

36.0ms
x
22.0ms
z
22.0ms
y
Results
ErrorSegmentsBranch
32.2b5x
22.9b3y
32.7b3z
Compiler

Compiled 20 to 13 computations (35% saved)

bsearch65.0ms (1.7%)

Algorithm
binary-search
Steps
TimeLeftRight
32.0ms
6.560611443828585e-7
0.006204766124600688
33.0ms
-60214154810.830696
-1141135824.9214814
Compiler

Compiled 16 to 11 computations (31.3% saved)

regimes23.0ms (0.6%)

Accuracy

Total -0.0b remaining (-0%)

Threshold costs -0.0b (-0%)

Counts
2 → 1
Calls
Call 1
Inputs
x
x
Outputs
x
Calls

3 calls:

8.0ms
z
7.0ms
y
7.0ms
x
Results
ErrorSegmentsBranch
34.6b1x
34.6b1y
34.6b1z
Compiler

Compiled 17 to 12 computations (29.4% saved)

simplify23.0ms (0.6%)

Algorithm
egg-herbie
Rules
+-commutative_binary64
*-commutative_binary64
1-exp_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
072308
182308
Stop Event
fuel
saturated
Calls
Call 1
Inputs
(fma.f64 y (+.f64 x z) x)
(+.f64 x (*.f64 y (+.f64 z x)))
(if (<=.f64 x -5230157599046497/19342813113834066795298816) (+.f64 (*.f64 y x) x) (if (<=.f64 x -8742854905044241/102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487168) (*.f64 y (+.f64 z x)) (if (<=.f64 x -8639848793895515/7914572847139345089936080672628710081124203171238778877250017794972711203409019749450124833959777439667125485632516458859243681097816038718961476963260581373331416708758372352) x (if (<=.f64 x 7454577143421877/46020944252475287237870212884199033180620210660923048261998100776379565006208246561973370194536329221406749153247076699560650180816490655358168942243705375840708580716765564230733368217919000094579989235733761476822566574679670497657321756298451772713817730735254092349426494960250807374037851220383801379127296) (*.f64 y (+.f64 z x)) (if (<=.f64 x 4890396890686629/304541062856249971261043199621099634714882089299843985214622076787904646586450815702050470808812820600790778632231520880733099058287596688955562103009770419360352428123639782183462176734064176511024987296225574339802674935168589842054573862983405175400866837597008673346307143437247315968) x (if (<=.f64 x 3403545714494509/112472844863579909570263462692149546471742427957547915827518889315295939516787196757976017152597271428748022765838022378080206651387357492225212879521629096378368) (*.f64 y (+.f64 z x)) (if (<=.f64 x 5048344243180867/86645927941275464361825443254471365732388658605494267974077486894206915868925800719999200190754361815543475342543861619655442432) (+.f64 (*.f64 y x) x) (if (<=.f64 x 3976052124853485/18788340662190665823115844774314696219005460391266558965658327772257672200916867547709591987078149624255479808) (*.f64 y (+.f64 z x)) (*.f64 (+.f64 1 y) x)))))))))
(if (<=.f64 x -6605029808428681/115792089237316195423570985008687907853269984665640564039457584007913129639936) (+.f64 (*.f64 y x) x) (if (<=.f64 x -8742854905044241/102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487168) (*.f64 y z) (if (<=.f64 x -8639848793895515/7914572847139345089936080672628710081124203171238778877250017794972711203409019749450124833959777439667125485632516458859243681097816038718961476963260581373331416708758372352) x (if (<=.f64 x 7454577143421877/46020944252475287237870212884199033180620210660923048261998100776379565006208246561973370194536329221406749153247076699560650180816490655358168942243705375840708580716765564230733368217919000094579989235733761476822566574679670497657321756298451772713817730735254092349426494960250807374037851220383801379127296) (*.f64 y z) (if (<=.f64 x 4890396890686629/304541062856249971261043199621099634714882089299843985214622076787904646586450815702050470808812820600790778632231520880733099058287596688955562103009770419360352428123639782183462176734064176511024987296225574339802674935168589842054573862983405175400866837597008673346307143437247315968) x (if (<=.f64 x 3403545714494509/112472844863579909570263462692149546471742427957547915827518889315295939516787196757976017152597271428748022765838022378080206651387357492225212879521629096378368) (*.f64 y z) (*.f64 (+.f64 1 y) x)))))))
(if (<=.f64 x -6605029808428681/115792089237316195423570985008687907853269984665640564039457584007913129639936) (+.f64 (*.f64 y x) x) (if (<=.f64 x -8742854905044241/102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487168) (*.f64 y z) (if (<=.f64 x -8639848793895515/7914572847139345089936080672628710081124203171238778877250017794972711203409019749450124833959777439667125485632516458859243681097816038718961476963260581373331416708758372352) x (if (<=.f64 x 7454577143421877/46020944252475287237870212884199033180620210660923048261998100776379565006208246561973370194536329221406749153247076699560650180816490655358168942243705375840708580716765564230733368217919000094579989235733761476822566574679670497657321756298451772713817730735254092349426494960250807374037851220383801379127296) (*.f64 y z) (if (<=.f64 x 4890396890686629/304541062856249971261043199621099634714882089299843985214622076787904646586450815702050470808812820600790778632231520880733099058287596688955562103009770419360352428123639782183462176734064176511024987296225574339802674935168589842054573862983405175400866837597008673346307143437247315968) x (if (<=.f64 x 3403545714494509/112472844863579909570263462692149546471742427957547915827518889315295939516787196757976017152597271428748022765838022378080206651387357492225212879521629096378368) (*.f64 y z) (+.f64 (*.f64 y x) x)))))))
(if (<=.f64 y -144999999999999993563909195899407297653653143471371500260998473852715816563314681556726031371485577216) (*.f64 y x) (if (<=.f64 y -4786270555011469/4194304) (*.f64 y z) (if (<=.f64 y 843613829728951/13803492693581127574869511724554050904902217944340773110325048447598592) x (if (<=.f64 y 900000000000000000164090133493466172772843520) (*.f64 y z) (*.f64 y x)))))
(if (<=.f64 y -7892389699365201/131072) (*.f64 y x) (if (<=.f64 y 1549080579473357/2361183241434822606848) x (*.f64 y x)))
x
Outputs
(fma.f64 y (+.f64 x z) x)
(+.f64 x (*.f64 y (+.f64 z x)))
(+.f64 x (*.f64 y (+.f64 x z)))
(if (<=.f64 x -5230157599046497/19342813113834066795298816) (+.f64 (*.f64 y x) x) (if (<=.f64 x -8742854905044241/102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487168) (*.f64 y (+.f64 z x)) (if (<=.f64 x -8639848793895515/7914572847139345089936080672628710081124203171238778877250017794972711203409019749450124833959777439667125485632516458859243681097816038718961476963260581373331416708758372352) x (if (<=.f64 x 7454577143421877/46020944252475287237870212884199033180620210660923048261998100776379565006208246561973370194536329221406749153247076699560650180816490655358168942243705375840708580716765564230733368217919000094579989235733761476822566574679670497657321756298451772713817730735254092349426494960250807374037851220383801379127296) (*.f64 y (+.f64 z x)) (if (<=.f64 x 4890396890686629/304541062856249971261043199621099634714882089299843985214622076787904646586450815702050470808812820600790778632231520880733099058287596688955562103009770419360352428123639782183462176734064176511024987296225574339802674935168589842054573862983405175400866837597008673346307143437247315968) x (if (<=.f64 x 3403545714494509/112472844863579909570263462692149546471742427957547915827518889315295939516787196757976017152597271428748022765838022378080206651387357492225212879521629096378368) (*.f64 y (+.f64 z x)) (if (<=.f64 x 5048344243180867/86645927941275464361825443254471365732388658605494267974077486894206915868925800719999200190754361815543475342543861619655442432) (+.f64 (*.f64 y x) x) (if (<=.f64 x 3976052124853485/18788340662190665823115844774314696219005460391266558965658327772257672200916867547709591987078149624255479808) (*.f64 y (+.f64 z x)) (*.f64 (+.f64 1 y) x)))))))))
(if (<=.f64 x -5230157599046497/19342813113834066795298816) (+.f64 x (*.f64 y x)) (if (<=.f64 x -8742854905044241/102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487168) (*.f64 y (+.f64 x z)) (if (<=.f64 x -8639848793895515/7914572847139345089936080672628710081124203171238778877250017794972711203409019749450124833959777439667125485632516458859243681097816038718961476963260581373331416708758372352) x (if (<=.f64 x 7454577143421877/46020944252475287237870212884199033180620210660923048261998100776379565006208246561973370194536329221406749153247076699560650180816490655358168942243705375840708580716765564230733368217919000094579989235733761476822566574679670497657321756298451772713817730735254092349426494960250807374037851220383801379127296) (*.f64 y (+.f64 x z)) (if (<=.f64 x 4890396890686629/304541062856249971261043199621099634714882089299843985214622076787904646586450815702050470808812820600790778632231520880733099058287596688955562103009770419360352428123639782183462176734064176511024987296225574339802674935168589842054573862983405175400866837597008673346307143437247315968) x (if (<=.f64 x 3403545714494509/112472844863579909570263462692149546471742427957547915827518889315295939516787196757976017152597271428748022765838022378080206651387357492225212879521629096378368) (*.f64 y (+.f64 x z)) (if (<=.f64 x 5048344243180867/86645927941275464361825443254471365732388658605494267974077486894206915868925800719999200190754361815543475342543861619655442432) (+.f64 x (*.f64 y x)) (if (<=.f64 x 3976052124853485/18788340662190665823115844774314696219005460391266558965658327772257672200916867547709591987078149624255479808) (*.f64 y (+.f64 x z)) (*.f64 x (+.f64 y 1))))))))))
(if (<=.f64 x -6605029808428681/115792089237316195423570985008687907853269984665640564039457584007913129639936) (+.f64 (*.f64 y x) x) (if (<=.f64 x -8742854905044241/102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487168) (*.f64 y z) (if (<=.f64 x -8639848793895515/7914572847139345089936080672628710081124203171238778877250017794972711203409019749450124833959777439667125485632516458859243681097816038718961476963260581373331416708758372352) x (if (<=.f64 x 7454577143421877/46020944252475287237870212884199033180620210660923048261998100776379565006208246561973370194536329221406749153247076699560650180816490655358168942243705375840708580716765564230733368217919000094579989235733761476822566574679670497657321756298451772713817730735254092349426494960250807374037851220383801379127296) (*.f64 y z) (if (<=.f64 x 4890396890686629/304541062856249971261043199621099634714882089299843985214622076787904646586450815702050470808812820600790778632231520880733099058287596688955562103009770419360352428123639782183462176734064176511024987296225574339802674935168589842054573862983405175400866837597008673346307143437247315968) x (if (<=.f64 x 3403545714494509/112472844863579909570263462692149546471742427957547915827518889315295939516787196757976017152597271428748022765838022378080206651387357492225212879521629096378368) (*.f64 y z) (*.f64 (+.f64 1 y) x)))))))
(if (<=.f64 x -6605029808428681/115792089237316195423570985008687907853269984665640564039457584007913129639936) (+.f64 x (*.f64 y x)) (if (<=.f64 x -8742854905044241/102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487168) (*.f64 y z) (if (<=.f64 x -8639848793895515/7914572847139345089936080672628710081124203171238778877250017794972711203409019749450124833959777439667125485632516458859243681097816038718961476963260581373331416708758372352) x (if (<=.f64 x 7454577143421877/46020944252475287237870212884199033180620210660923048261998100776379565006208246561973370194536329221406749153247076699560650180816490655358168942243705375840708580716765564230733368217919000094579989235733761476822566574679670497657321756298451772713817730735254092349426494960250807374037851220383801379127296) (*.f64 y z) (if (<=.f64 x 4890396890686629/304541062856249971261043199621099634714882089299843985214622076787904646586450815702050470808812820600790778632231520880733099058287596688955562103009770419360352428123639782183462176734064176511024987296225574339802674935168589842054573862983405175400866837597008673346307143437247315968) x (if (<=.f64 x 3403545714494509/112472844863579909570263462692149546471742427957547915827518889315295939516787196757976017152597271428748022765838022378080206651387357492225212879521629096378368) (*.f64 y z) (*.f64 x (+.f64 y 1))))))))
(if (<=.f64 x -6605029808428681/115792089237316195423570985008687907853269984665640564039457584007913129639936) (+.f64 (*.f64 y x) x) (if (<=.f64 x -8742854905044241/102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487168) (*.f64 y z) (if (<=.f64 x -8639848793895515/7914572847139345089936080672628710081124203171238778877250017794972711203409019749450124833959777439667125485632516458859243681097816038718961476963260581373331416708758372352) x (if (<=.f64 x 7454577143421877/46020944252475287237870212884199033180620210660923048261998100776379565006208246561973370194536329221406749153247076699560650180816490655358168942243705375840708580716765564230733368217919000094579989235733761476822566574679670497657321756298451772713817730735254092349426494960250807374037851220383801379127296) (*.f64 y z) (if (<=.f64 x 4890396890686629/304541062856249971261043199621099634714882089299843985214622076787904646586450815702050470808812820600790778632231520880733099058287596688955562103009770419360352428123639782183462176734064176511024987296225574339802674935168589842054573862983405175400866837597008673346307143437247315968) x (if (<=.f64 x 3403545714494509/112472844863579909570263462692149546471742427957547915827518889315295939516787196757976017152597271428748022765838022378080206651387357492225212879521629096378368) (*.f64 y z) (+.f64 (*.f64 y x) x)))))))
(if (<=.f64 x -6605029808428681/115792089237316195423570985008687907853269984665640564039457584007913129639936) (+.f64 x (*.f64 y x)) (if (<=.f64 x -8742854905044241/102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487168) (*.f64 y z) (if (<=.f64 x -8639848793895515/7914572847139345089936080672628710081124203171238778877250017794972711203409019749450124833959777439667125485632516458859243681097816038718961476963260581373331416708758372352) x (if (<=.f64 x 7454577143421877/46020944252475287237870212884199033180620210660923048261998100776379565006208246561973370194536329221406749153247076699560650180816490655358168942243705375840708580716765564230733368217919000094579989235733761476822566574679670497657321756298451772713817730735254092349426494960250807374037851220383801379127296) (*.f64 y z) (if (<=.f64 x 4890396890686629/304541062856249971261043199621099634714882089299843985214622076787904646586450815702050470808812820600790778632231520880733099058287596688955562103009770419360352428123639782183462176734064176511024987296225574339802674935168589842054573862983405175400866837597008673346307143437247315968) x (if (<=.f64 x 3403545714494509/112472844863579909570263462692149546471742427957547915827518889315295939516787196757976017152597271428748022765838022378080206651387357492225212879521629096378368) (*.f64 y z) (+.f64 x (*.f64 y x))))))))
(if (<=.f64 y -144999999999999993563909195899407297653653143471371500260998473852715816563314681556726031371485577216) (*.f64 y x) (if (<=.f64 y -4786270555011469/4194304) (*.f64 y z) (if (<=.f64 y 843613829728951/13803492693581127574869511724554050904902217944340773110325048447598592) x (if (<=.f64 y 900000000000000000164090133493466172772843520) (*.f64 y z) (*.f64 y x)))))
(if (<=.f64 y -7892389699365201/131072) (*.f64 y x) (if (<=.f64 y 1549080579473357/2361183241434822606848) x (*.f64 y x)))
x
Compiler

Compiled 241 to 126 computations (47.7% saved)

soundness22.0ms (0.6%)

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

Useful iterations: 1 (0.0ms)

IterNodesCost
0710
1168
2358
3508
4598
5668
6728
7918
81078
91218
101398
111468
121478
Stop Event
saturated
Compiler

Compiled 38 to 22 computations (42.1% saved)

end155.0ms (4.1%)

Compiler

Compiled 220 to 94 computations (57.3% saved)

Profiling

Loading profile data...