sqrt A (should all be same)

Time bar (total: 2.1s)

analyze0.0ms (0%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%100%0%0%0%0%0
0%0%100%0%0%0%0%1
100%100%0%0%0%0%0%2
Compiler

Compiled 10 to 5 computations (50% saved)

Precisions
Click to see histograms. Total time spent on operations: 0.0ms
ival-add: 0.0ms (0% of total)
ival-mult: 0.0ms (0% of total)
const: 0.0ms (0% of total)
ival-sqrt: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

sample681.0ms (32%)

Results
519.0ms8256×0valid
Precisions
Click to see histograms. Total time spent on operations: 246.0ms
ival-mult: 103.0ms (41.8% of total)
ival-sqrt: 71.0ms (28.8% of total)
ival-add: 62.0ms (25.2% of total)
const: 7.0ms (2.8% of total)
backward-pass: 3.0ms (1.2% of total)
Bogosity

preprocess23.0ms (1.1%)

Algorithm
egg-herbie
Rules
170×fmsub-define
166×fnmadd-define
160×fnmsub-define
108×fma-define
80×sum3-define
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0910
13210
27710
319910
439410
561710
668410
768710
043
1113
2143
3173
0173
Stop Event
iter limit
saturated
saturated
Calls
Call 1
Inputs
(sqrt (+ (* x x) (* x x)))
Outputs
(sqrt (+ (* x x) (* x x)))
(hypot.f64 x x)
Call 2
Inputs
(sqrt (+ (* x x) (* x x)))
(sqrt (+ (* (neg x) (neg x)) (* (neg x) (neg x))))
(neg (sqrt (+ (* (neg x) (neg x)) (* (neg x) (neg x)))))
Outputs
(sqrt (+ (* x x) (* x x)))
(hypot x x)
(sqrt (+ (* (neg x) (neg x)) (* (neg x) (neg x))))
(hypot x x)
(neg (sqrt (+ (* (neg x) (neg x)) (* (neg x) (neg x)))))
(neg (hypot x x))
Symmetry

(abs x)

explain72.0ms (3.4%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
1340-3(2.3378134110701497e-161)(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
00-0-x
00-0-(*.f64 x x)
00-0-(+.f64 (*.f64 x x) (*.f64 x x))
Results
50.0ms512×0valid
Compiler

Compiled 51 to 14 computations (72.5% saved)

Precisions
Click to see histograms. Total time spent on operations: 14.0ms
ival-mult: 5.0ms (36.2% of total)
ival-add: 4.0ms (29% of total)
ival-sqrt: 4.0ms (29% of total)
const: 1.0ms (7.2% of total)
backward-pass: 0.0ms (0% of total)

eval0.0ms (0%)

Compiler

Compiled 4 to 2 computations (50% saved)

prune1.0ms (0%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
Compiler

Compiled 4 to 2 computations (50% saved)

simplify4.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 1 expressions of interest:

NewMetricScoreProgram
cost-diff0
(hypot.f64 x x)
Rules
14×*-lowering-*.f32
14×*-lowering-*.f64
*-commutative
+-lowering-+.f64
count-2
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
044
1114
2144
3174
0174
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(sqrt (+ (* x x) (* x x)))
x
Outputs
(sqrt (+ (* x x) (* x x)))
(hypot.f64 x x)
x

localize30.0ms (1.4%)

Localize:

Found 1 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(hypot.f64 x x)
Results
25.0ms256×0valid
Compiler

Compiled 6 to 3 computations (50% saved)

Precisions
Click to see histograms. Total time spent on operations: 33.0ms
compiled-spec: 17.0ms (51.7% of total)
ival-mult: 12.0ms (36.5% of total)
ival-add: 2.0ms (6.1% of total)
ival-sqrt: 2.0ms (6.1% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

series1.0ms (0.1%)

Counts
1 → 12
Calls
Call 1
Inputs
#<alt (sqrt (+ (* x x) (* x x)))>
Outputs
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@0
(sqrt (+ (* x x) (* x x)))
0.0ms
x
@inf
(sqrt (+ (* x x) (* x x)))
0.0ms
x
@-inf
(sqrt (+ (* x x) (* x x)))

rewrite185.0ms (8.7%)

Algorithm
batch-egg-rewrite
Rules
3032×*-lowering-*.f32
3032×*-lowering-*.f64
1606×sum3-define
1196×+-lowering-+.f64
1196×+-lowering-+.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
043
1143
2353
3723
41493
53093
68723
745283
080993
Stop Event
iter limit
node limit
Counts
1 → 32
Calls
Call 1
Inputs
(sqrt (+ (* x x) (* x x)))
Outputs
(exp.f64 (*.f64 #s(literal 1/2 binary64) (log.f64 (*.f64 (*.f64 x x) #s(literal 2 binary64)))))
(hypot.f64 x x)
(sqrt.f64 (*.f64 (*.f64 x x) #s(literal 2 binary64)))
(neg.f64 (hypot.f64 x x))
(pow.f64 (*.f64 (*.f64 x x) #s(literal 2 binary64)) #s(literal 1/2 binary64))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (log.f64 (*.f64 (*.f64 x x) #s(literal 2 binary64))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (*.f64 x #s(literal 2 binary64))))
(*.f64 (sqrt.f64 (*.f64 x #s(literal 2 binary64))) (sqrt.f64 x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(*.f64 #s(literal 1 binary64) (hypot.f64 x x))
(*.f64 (pow.f64 x #s(literal 1/4 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/2 binary64)))))
(*.f64 #s(literal -1 binary64) (hypot.f64 x x))
(*.f64 (-.f64 #s(literal 0 binary64) (sqrt.f64 x)) (*.f64 (-.f64 #s(literal 0 binary64) (sqrt.f64 x)) (sqrt.f64 #s(literal 2 binary64))))
(*.f64 (pow.f64 x #s(literal 3/4 binary64)) (pow.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)) #s(literal 1/2 binary64)))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (pow.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 7/4 binary64))) #s(literal 1/2 binary64)))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 7/4 binary64)))))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (*.f64 (pow.f64 x #s(literal 3/8 binary64)) (sqrt.f64 (*.f64 x #s(literal 2 binary64)))))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (*.f64 (pow.f64 x #s(literal 1/8 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/2 binary64))))))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (pow.f64 (exp.f64 #s(literal 1/2 binary64)) (log.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 7/4 binary64))))))
(*.f64 (pow.f64 x #s(literal 3/8 binary64)) (*.f64 (pow.f64 x #s(literal 1/8 binary64)) (sqrt.f64 (*.f64 x #s(literal 2 binary64)))))
(*.f64 (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/2 binary64)))) (pow.f64 x #s(literal 1/4 binary64)))
(*.f64 (pow.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)) #s(literal 1/2 binary64)) (pow.f64 x #s(literal 3/4 binary64)))
(*.f64 (pow.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 7/4 binary64))) #s(literal 1/2 binary64)) (pow.f64 x #s(literal 1/8 binary64)))
(*.f64 (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 7/4 binary64)))) (pow.f64 x #s(literal 1/8 binary64)))
(*.f64 (*.f64 (sqrt.f64 (*.f64 x #s(literal 2 binary64))) (pow.f64 x #s(literal 1/8 binary64))) (pow.f64 x #s(literal 3/8 binary64)))
(*.f64 (*.f64 (sqrt.f64 (*.f64 x #s(literal 2 binary64))) (pow.f64 x #s(literal 3/8 binary64))) (pow.f64 x #s(literal 1/8 binary64)))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) #s(literal 1 binary64)) x)
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) #s(literal -1 binary64)) x)
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (-.f64 #s(literal 0 binary64) (sqrt.f64 x))) (-.f64 #s(literal 0 binary64) (sqrt.f64 x)))
(*.f64 (*.f64 (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/2 binary64)))) (pow.f64 x #s(literal 1/8 binary64))) (pow.f64 x #s(literal 1/8 binary64)))
(*.f64 (pow.f64 (exp.f64 #s(literal 1/2 binary64)) (log.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 7/4 binary64))))) (pow.f64 x #s(literal 1/8 binary64)))

simplify8.0ms (0.4%)

Algorithm
egg-herbie
Rules
88×sum3-define
76×fma-define
32×fma-lowering-fma.f32
32×fma-lowering-fma.f64
24×fmsub-define
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0652
11152
22452
32852
43252
55452
68652
79852
812152
918852
018852
Stop Event
iter limit
saturated
Counts
12 → 12
Calls
Call 1
Inputs
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
(* -1 (* x (sqrt 2)))
Outputs
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (-.f64 #s(literal 0 binary64) x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (-.f64 #s(literal 0 binary64) x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (-.f64 #s(literal 0 binary64) x))
(* -1 (* x (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (-.f64 #s(literal 0 binary64) x))

eval7.0ms (0.3%)

Compiler

Compiled 347 to 81 computations (76.7% saved)

prune4.0ms (0.2%)

Pruning

2 alts after pruning (1 fresh and 1 done)

PrunedKeptTotal
New43144
Fresh000
Picked011
Done000
Total43245
Accuracy
100.0%
Counts
45 → 2
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.4%
(*.f64 (pow.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)) #s(literal 1/2 binary64)) (pow.f64 x #s(literal 3/4 binary64)))
Compiler

Compiled 15 to 11 computations (26.7% saved)

simplify4.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
cost-diff0
(sqrt.f64 x)
cost-diff0
(*.f64 #s(literal 2 binary64) (sqrt.f64 x))
cost-diff64
(pow.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)) #s(literal 1/2 binary64))
cost-diff64
(*.f64 (pow.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)) #s(literal 1/2 binary64)) (pow.f64 x #s(literal 3/4 binary64)))
Rules
*-lowering-*.f32
*-lowering-*.f64
*-commutative
sqrt-lowering-sqrt.f64
pow-lowering-pow.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0927
11227
01227
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* (pow (* 2 (sqrt x)) 1/2) (pow x 3/4))
(pow (* 2 (sqrt x)) 1/2)
(* 2 (sqrt x))
2
(sqrt x)
x
1/2
(pow x 3/4)
3/4
Outputs
(* (pow (* 2 (sqrt x)) 1/2) (pow x 3/4))
(*.f64 (sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))) (pow.f64 x #s(literal 3/4 binary64)))
(pow (* 2 (sqrt x)) 1/2)
(sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)))
(* 2 (sqrt x))
(*.f64 #s(literal 2 binary64) (sqrt.f64 x))
2
#s(literal 2 binary64)
(sqrt x)
(sqrt.f64 x)
x
1/2
#s(literal 1/2 binary64)
(pow x 3/4)
(pow.f64 x #s(literal 3/4 binary64))
3/4
#s(literal 3/4 binary64)

localize57.0ms (2.7%)

Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 #s(literal 2 binary64) (sqrt.f64 x))
accuracy100.0%
(sqrt.f64 x)
accuracy99.8%
(pow.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)) #s(literal 1/2 binary64))
accuracy99.5%
(*.f64 (pow.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)) #s(literal 1/2 binary64)) (pow.f64 x #s(literal 3/4 binary64)))
Results
46.0ms256×0valid
Compiler

Compiled 31 to 10 computations (67.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 17.0ms
ival-pow: 10.0ms (58.9% of total)
ival-mult: 4.0ms (23.6% of total)
ival-sqrt: 2.0ms (11.8% of total)
const: 1.0ms (5.9% of total)
backward-pass: 0.0ms (0% of total)

series100.0ms (4.7%)

Counts
4 → 48
Calls
Call 1
Inputs
#<alt (* (pow (* 2 (sqrt x)) 1/2) (pow x 3/4))>
#<alt (pow (* 2 (sqrt x)) 1/2)>
#<alt (* 2 (sqrt x))>
#<alt (sqrt x)>
Outputs
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))>
#<alt (* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))>
#<alt (* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))>
#<alt (* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))>
#<alt (* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))>
#<alt (* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))>
#<alt (* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* -2 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -2 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -2 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -2 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
Calls

12 calls:

TimeVariablePointExpression
30.0ms
x
@0
(* 2 (sqrt x))
30.0ms
x
@-inf
(* (pow (* 2 (sqrt x)) 1/2) (pow x 3/4))
30.0ms
x
@0
(pow (* 2 (sqrt x)) 1/2)
7.0ms
x
@inf
(pow (* 2 (sqrt x)) 1/2)
1.0ms
x
@-inf
(pow (* 2 (sqrt x)) 1/2)

rewrite241.0ms (11.3%)

Algorithm
batch-egg-rewrite
Rules
2232×*-lowering-*.f32
2232×*-lowering-*.f64
1758×+-lowering-+.f64
1758×+-lowering-+.f32
1644×pow-lowering-pow.f64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
0920
12220
25317
310315
416615
527715
654415
7225115
8721815
0816715
Stop Event
iter limit
node limit
Counts
4 → 105
Calls
Call 1
Inputs
(* (pow (* 2 (sqrt x)) 1/2) (pow x 3/4))
(pow (* 2 (sqrt x)) 1/2)
(* 2 (sqrt x))
(sqrt x)
Outputs
(exp.f64 (+.f64 (log.f64 x) (*.f64 #s(literal 1/2 binary64) (log.f64 #s(literal 2 binary64)))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))) (pow.f64 x #s(literal 3/4 binary64)))
(*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(*.f64 (pow.f64 x #s(literal 1/4 binary64)) (*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 #s(literal 2 binary64))))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 #s(literal 2 binary64))) (pow.f64 x #s(literal 1/4 binary64)))
(*.f64 (pow.f64 x #s(literal 3/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64))))
(*.f64 (pow.f64 x #s(literal 1/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64))))
(*.f64 (pow.f64 x #s(literal 9/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64))))
(*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (pow.f64 x #s(literal 27/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (pow.f64 x #s(literal 1/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 1/64 binary64)) (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 27/64 binary64)) (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 15/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64))))
(*.f64 (pow.f64 x #s(literal 13/16 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64))) (pow.f64 x #s(literal 3/16 binary64)))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64))) (pow.f64 x #s(literal 9/16 binary64)))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64))) (pow.f64 x #s(literal 1/16 binary64)))
(*.f64 (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))) (pow.f64 x #s(literal 13/16 binary64)))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 9/16 binary64))) (pow.f64 x #s(literal 7/16 binary64)))
(*.f64 (pow.f64 x #s(literal 7/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 9/16 binary64))))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64))) (pow.f64 x #s(literal 15/16 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64)))) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64)))) (pow.f64 x #s(literal 9/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 27/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64)))) (pow.f64 x #s(literal 9/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 1/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64)))) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64)))) (pow.f64 x #s(literal 1/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64)))) (pow.f64 x #s(literal 27/64 binary64)))
(exp.f64 (*.f64 #s(literal 1/2 binary64) (log.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)))))
(sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)))
(pow.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)) #s(literal 1/2 binary64))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (log.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (*.f64 #s(literal 1 binary64) (log.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)))))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(*.f64 (pow.f64 x #s(literal 1/4 binary64)) (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (pow.f64 x #s(literal 3/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64))))
(*.f64 (pow.f64 x #s(literal 1/16 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))))
(*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 9/64 binary64)) (sqrt.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (pow.f64 x #s(literal 1/64 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (sqrt.f64 (*.f64 (pow.f64 x #s(literal 1/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (sqrt.f64 (*.f64 (pow.f64 x #s(literal 9/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 1/64 binary64)) (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 1/64 binary64)) (sqrt.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))))
(*.f64 (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))) (pow.f64 x #s(literal 1/16 binary64)))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64))) (pow.f64 x #s(literal 3/16 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))) (pow.f64 x #s(literal 1/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 1/64 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64)))) (pow.f64 x #s(literal 9/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64)))) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 1/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))) (pow.f64 x #s(literal 1/64 binary64)))
(*.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))) (pow.f64 x #s(literal 9/64 binary64)))
(*.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 9/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))) (pow.f64 x #s(literal 3/64 binary64)))
(exp.f64 (log.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
(*.f64 #s(literal 2 binary64) (sqrt.f64 x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (exp.f64 (log.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 3/8 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))
(*.f64 (pow.f64 x #s(literal 3/8 binary64)) (exp.f64 (log.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 (pow.f64 x #s(literal 9/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64)))))
(*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 (pow.f64 x #s(literal 1/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))))
(*.f64 (pow.f64 x #s(literal 1/32 binary64)) (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))))
(*.f64 (pow.f64 x #s(literal 9/32 binary64)) (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64)))))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))) (pow.f64 x #s(literal 1/8 binary64)))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))) (pow.f64 x #s(literal 3/8 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 9/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64)))) (pow.f64 x #s(literal 3/32 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 1/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))) (pow.f64 x #s(literal 3/32 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))) (pow.f64 x #s(literal 1/32 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64)))) (pow.f64 x #s(literal 9/32 binary64)))
(*.f64 (exp.f64 (log.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))) (pow.f64 x #s(literal 1/8 binary64)))
(*.f64 (exp.f64 (log.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))) (pow.f64 x #s(literal 3/8 binary64)))
(exp.f64 (/.f64 (log.f64 x) #s(literal 2 binary64)))
(sqrt.f64 x)
(/.f64 #s(literal 1 binary64) (pow.f64 (E.f64) (/.f64 (log.f64 x) #s(literal -2 binary64))))
(/.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (log.f64 x) #s(literal -2 binary64))))
(pow.f64 x #s(literal 1/2 binary64))
(pow.f64 (sqrt.f64 x) #s(literal 1 binary64))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (log.f64 x))
(pow.f64 (E.f64) (/.f64 (log.f64 x) #s(literal 2 binary64)))
(pow.f64 (/.f64 #s(literal 1 binary64) x) #s(literal -1/2 binary64))
(pow.f64 (pow.f64 (E.f64) #s(literal 1/2 binary64)) (log.f64 x))
(pow.f64 (*.f64 (exp.f64 #s(literal 1/8 binary64)) (exp.f64 #s(literal 3/8 binary64))) (log.f64 x))
(pow.f64 (*.f64 (exp.f64 #s(literal 3/8 binary64)) (exp.f64 #s(literal 1/8 binary64))) (log.f64 x))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (pow.f64 x #s(literal 3/8 binary64)))
(*.f64 (pow.f64 x #s(literal 3/8 binary64)) (pow.f64 x #s(literal 1/8 binary64)))
(*.f64 (pow.f64 x #s(literal 3/32 binary64)) (pow.f64 x #s(literal 13/32 binary64)))
(*.f64 (pow.f64 x #s(literal 1/32 binary64)) (pow.f64 x #s(literal 15/32 binary64)))
(*.f64 (pow.f64 x #s(literal 9/32 binary64)) (pow.f64 x #s(literal 7/32 binary64)))
(*.f64 (pow.f64 x #s(literal 9/128 binary64)) (sqrt.f64 (pow.f64 x #s(literal 55/64 binary64))))
(*.f64 (pow.f64 x #s(literal 27/128 binary64)) (sqrt.f64 (pow.f64 x #s(literal 37/64 binary64))))
(*.f64 (pow.f64 x #s(literal 3/128 binary64)) (sqrt.f64 (pow.f64 x #s(literal 61/64 binary64))))
(*.f64 (pow.f64 x #s(literal 1/128 binary64)) (sqrt.f64 (pow.f64 x #s(literal 63/64 binary64))))
(*.f64 (pow.f64 x #s(literal 13/32 binary64)) (pow.f64 x #s(literal 3/32 binary64)))
(*.f64 (pow.f64 x #s(literal 15/32 binary64)) (pow.f64 x #s(literal 1/32 binary64)))
(*.f64 (pow.f64 x #s(literal 7/32 binary64)) (pow.f64 x #s(literal 9/32 binary64)))
(*.f64 (sqrt.f64 (pow.f64 x #s(literal 55/64 binary64))) (pow.f64 x #s(literal 9/128 binary64)))
(*.f64 (sqrt.f64 (pow.f64 x #s(literal 61/64 binary64))) (pow.f64 x #s(literal 3/128 binary64)))
(*.f64 (sqrt.f64 (pow.f64 x #s(literal 63/64 binary64))) (pow.f64 x #s(literal 1/128 binary64)))
(*.f64 (sqrt.f64 (pow.f64 x #s(literal 37/64 binary64))) (pow.f64 x #s(literal 27/128 binary64)))

simplify137.0ms (6.4%)

Algorithm
egg-herbie
Rules
2772×fma-define
1646×fnmadd-define
1038×sum3-define
936×fma-lowering-fma.f32
936×fma-lowering-fma.f64
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
027248
159248
2161244
3434244
4839244
51232244
62368244
73312244
84113244
94930244
105181244
115183244
125183244
135308244
05308244
Stop Event
iter limit
saturated
Counts
48 → 48
Calls
Call 1
Inputs
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
Outputs
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(*.f64 (*.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))) (pow.f64 #s(literal -1 binary64) #s(literal 5/4 binary64)))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(*.f64 (*.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))) (pow.f64 #s(literal -1 binary64) #s(literal 5/4 binary64)))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(*.f64 (*.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))) (pow.f64 #s(literal -1 binary64) #s(literal 5/4 binary64)))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(*.f64 (*.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))) (pow.f64 #s(literal -1 binary64) #s(literal 5/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (*.f64 (sqrt.f64 (sqrt.f64 #s(literal -1 binary64))) (pow.f64 (-.f64 #s(literal 0 binary64) x) #s(literal 1/4 binary64))))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (*.f64 (sqrt.f64 (sqrt.f64 #s(literal -1 binary64))) (pow.f64 (-.f64 #s(literal 0 binary64) x) #s(literal 1/4 binary64))))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (*.f64 (sqrt.f64 (sqrt.f64 #s(literal -1 binary64))) (pow.f64 (-.f64 #s(literal 0 binary64) x) #s(literal 1/4 binary64))))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (*.f64 (sqrt.f64 (sqrt.f64 #s(literal -1 binary64))) (pow.f64 (-.f64 #s(literal 0 binary64) x) #s(literal 1/4 binary64))))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)

eval25.0ms (1.2%)

Compiler

Compiled 1951 to 378 computations (80.6% saved)

prune13.0ms (0.6%)

Pruning

2 alts after pruning (1 fresh and 1 done)

PrunedKeptTotal
New1521153
Fresh000
Picked101
Done011
Total1532155
Accuracy
100.0%
Counts
155 → 2
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.4%
(*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
Compiler

Compiled 14 to 10 computations (28.6% saved)

simplify4.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 #s(literal 2 binary64) (sqrt.f64 x))
cost-diff0
(sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)))
cost-diff0
(pow.f64 x #s(literal 3/4 binary64))
cost-diff0
(*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
Rules
*-lowering-*.f32
*-lowering-*.f64
*-commutative
sqrt-lowering-sqrt.f64
sqrt-lowering-sqrt.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0826
11026
01026
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* (pow x 3/4) (sqrt (* 2 (sqrt x))))
(pow x 3/4)
x
3/4
(sqrt (* 2 (sqrt x)))
(* 2 (sqrt x))
2
(sqrt x)
Outputs
(* (pow x 3/4) (sqrt (* 2 (sqrt x))))
(*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
(pow x 3/4)
(pow.f64 x #s(literal 3/4 binary64))
x
3/4
#s(literal 3/4 binary64)
(sqrt (* 2 (sqrt x)))
(sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)))
(* 2 (sqrt x))
(*.f64 #s(literal 2 binary64) (sqrt.f64 x))
2
#s(literal 2 binary64)
(sqrt x)
(sqrt.f64 x)

localize73.0ms (3.4%)

Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 #s(literal 2 binary64) (sqrt.f64 x))
accuracy100.0%
(sqrt.f64 x)
accuracy99.8%
(sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)))
accuracy99.5%
(*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
Results
34.0ms256×0valid
Compiler

Compiled 28 to 9 computations (67.9% saved)

Precisions
Click to see histograms. Total time spent on operations: 16.0ms
ival-pow: 8.0ms (50.1% of total)
ival-sqrt: 4.0ms (25% of total)
ival-mult: 3.0ms (18.8% of total)
const: 1.0ms (6.3% of total)
backward-pass: 0.0ms (0% of total)

series26.0ms (1.2%)

Counts
5 → 60
Calls
Call 1
Inputs
#<alt (* (pow x 3/4) (sqrt (* 2 (sqrt x))))>
#<alt (pow x 3/4)>
#<alt (sqrt (* 2 (sqrt x)))>
#<alt (* 2 (sqrt x))>
#<alt (sqrt x)>
Outputs
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))>
#<alt (* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))>
#<alt (* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))>
#<alt (* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))>
#<alt (pow (* 1 (pow x 3)) 1/4)>
#<alt (pow (* 1 (pow x 3)) 1/4)>
#<alt (pow (* 1 (pow x 3)) 1/4)>
#<alt (pow (* 1 (pow x 3)) 1/4)>
#<alt (pow (* 1 (pow x 3)) 1/4)>
#<alt (pow (* 1 (pow x 3)) 1/4)>
#<alt (pow (* 1 (pow x 3)) 1/4)>
#<alt (pow (* 1 (pow x 3)) 1/4)>
#<alt (exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))>
#<alt (exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))>
#<alt (exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))>
#<alt (exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* 1 x) 1/4) (sqrt 2))>
#<alt (* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))>
#<alt (* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))>
#<alt (* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))>
#<alt (* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* 2 (sqrt x))>
#<alt (* -2 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -2 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -2 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -2 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (sqrt x)>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
#<alt (* -1 (* (sqrt x) (pow (sqrt -1) 2)))>
Calls

15 calls:

TimeVariablePointExpression
9.0ms
x
@inf
(pow x 3/4)
8.0ms
x
@0
(pow x 3/4)
7.0ms
x
@-inf
(pow x 3/4)
0.0ms
x
@-inf
(sqrt (* 2 (sqrt x)))
0.0ms
x
@inf
(sqrt (* 2 (sqrt x)))

rewrite192.0ms (9%)

Algorithm
batch-egg-rewrite
Rules
2232×*-lowering-*.f32
2232×*-lowering-*.f64
1758×+-lowering-+.f64
1758×+-lowering-+.f32
1644×pow-lowering-pow.f64
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
0823
11923
23820
37418
413318
526518
656018
7233518
8729518
0824418
Stop Event
iter limit
node limit
Counts
5 → 121
Calls
Call 1
Inputs
(* (pow x 3/4) (sqrt (* 2 (sqrt x))))
(pow x 3/4)
(sqrt (* 2 (sqrt x)))
(* 2 (sqrt x))
(sqrt x)
Outputs
(exp.f64 (+.f64 (log.f64 x) (*.f64 #s(literal 1/2 binary64) (log.f64 #s(literal 2 binary64)))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (pow.f64 x #s(literal 3/4 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64))))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64))) (pow.f64 x #s(literal 3/4 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(*.f64 (pow.f64 x #s(literal 1/4 binary64)) (*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 #s(literal 2 binary64))))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 #s(literal 2 binary64))) (pow.f64 x #s(literal 1/4 binary64)))
(*.f64 (pow.f64 x #s(literal 9/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64))))
(*.f64 (pow.f64 x #s(literal 3/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64))))
(*.f64 (pow.f64 x #s(literal 1/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (pow.f64 x #s(literal 1/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 1/64 binary64)) (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (pow.f64 x #s(literal 27/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 27/64 binary64)) (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 7/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 9/16 binary64))))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64))) (pow.f64 x #s(literal 9/16 binary64)))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64))) (pow.f64 x #s(literal 1/16 binary64)))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64))) (pow.f64 x #s(literal 3/16 binary64)))
(*.f64 (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))) (pow.f64 x #s(literal 13/16 binary64)))
(*.f64 (pow.f64 x #s(literal 13/16 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))))
(*.f64 (pow.f64 x #s(literal 15/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64))))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 9/16 binary64))) (pow.f64 x #s(literal 7/16 binary64)))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64))) (pow.f64 x #s(literal 15/16 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64)))) (pow.f64 x #s(literal 27/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 1/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64)))) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64)))) (pow.f64 x #s(literal 9/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 13/16 binary64)))) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 27/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 7/16 binary64)))) (pow.f64 x #s(literal 9/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 15/16 binary64)))) (pow.f64 x #s(literal 1/64 binary64)))
(exp.f64 (*.f64 #s(literal 3/4 binary64) (log.f64 x)))
(pow.f64 x #s(literal 3/4 binary64))
(pow.f64 (pow.f64 x #s(literal 3/4 binary64)) #s(literal 1 binary64))
(pow.f64 (exp.f64 #s(literal 3/4 binary64)) (log.f64 x))
(pow.f64 (E.f64) (*.f64 #s(literal 3/4 binary64) (log.f64 x)))
(pow.f64 (pow.f64 (E.f64) #s(literal 3/4 binary64)) (log.f64 x))
(pow.f64 (*.f64 (exp.f64 #s(literal 9/16 binary64)) (exp.f64 #s(literal 3/16 binary64))) (log.f64 x))
(pow.f64 (*.f64 (exp.f64 #s(literal 3/16 binary64)) (exp.f64 #s(literal 9/16 binary64))) (log.f64 x))
(*.f64 (pow.f64 x #s(literal 9/16 binary64)) (pow.f64 x #s(literal 3/16 binary64)))
(*.f64 (pow.f64 x #s(literal 3/16 binary64)) (pow.f64 x #s(literal 9/16 binary64)))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (pow.f64 x #s(literal 45/64 binary64)))
(*.f64 (pow.f64 x #s(literal 9/64 binary64)) (pow.f64 x #s(literal 39/64 binary64)))
(*.f64 (pow.f64 x #s(literal 27/64 binary64)) (pow.f64 x #s(literal 21/64 binary64)))
(*.f64 (pow.f64 x #s(literal 39/64 binary64)) (pow.f64 x #s(literal 9/64 binary64)))
(*.f64 (pow.f64 x #s(literal 45/64 binary64)) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (pow.f64 x #s(literal 21/64 binary64)) (pow.f64 x #s(literal 27/64 binary64)))
(exp.f64 (*.f64 #s(literal 1/2 binary64) (log.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)))))
(sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)))
(pow.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)) #s(literal 1/2 binary64))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (log.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (*.f64 #s(literal 1 binary64) (log.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)))))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(*.f64 (pow.f64 x #s(literal 1/4 binary64)) (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (pow.f64 x #s(literal 3/16 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64))))
(*.f64 (pow.f64 x #s(literal 1/16 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (pow.f64 x #s(literal 1/64 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (sqrt.f64 (*.f64 (pow.f64 x #s(literal 9/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 3/64 binary64)) (sqrt.f64 (*.f64 (pow.f64 x #s(literal 1/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 1/64 binary64)) (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 1/64 binary64)) (sqrt.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64)))))
(*.f64 (pow.f64 x #s(literal 9/64 binary64)) (sqrt.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))))
(*.f64 (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))) (pow.f64 x #s(literal 1/16 binary64)))
(*.f64 (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64))) (pow.f64 x #s(literal 3/16 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 1/64 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 9/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64)))) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/16 binary64)))) (pow.f64 x #s(literal 9/64 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/64 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))) (pow.f64 x #s(literal 1/64 binary64)))
(*.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 9/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))) (pow.f64 x #s(literal 3/64 binary64)))
(*.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))) (pow.f64 x #s(literal 1/64 binary64)))
(*.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))) (pow.f64 x #s(literal 9/64 binary64)))
(*.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 1/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))) (pow.f64 x #s(literal 3/64 binary64)))
(exp.f64 (log.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
(*.f64 #s(literal 2 binary64) (sqrt.f64 x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (exp.f64 (log.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 3/8 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))
(*.f64 (pow.f64 x #s(literal 3/8 binary64)) (exp.f64 (log.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))))
(*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 (pow.f64 x #s(literal 1/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))))
(*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 (pow.f64 x #s(literal 9/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64)))))
(*.f64 (pow.f64 x #s(literal 1/32 binary64)) (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))))
(*.f64 (pow.f64 x #s(literal 9/32 binary64)) (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64)))))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))) (pow.f64 x #s(literal 1/8 binary64)))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))) (pow.f64 x #s(literal 3/8 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 1/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))) (pow.f64 x #s(literal 3/32 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64)))) (pow.f64 x #s(literal 1/32 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 9/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64)))) (pow.f64 x #s(literal 3/32 binary64)))
(*.f64 (*.f64 (pow.f64 x #s(literal 3/32 binary64)) (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64)))) (pow.f64 x #s(literal 9/32 binary64)))
(*.f64 (exp.f64 (log.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/8 binary64))))) (pow.f64 x #s(literal 1/8 binary64)))
(*.f64 (exp.f64 (log.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 1/8 binary64))))) (pow.f64 x #s(literal 3/8 binary64)))
(exp.f64 (/.f64 (log.f64 x) #s(literal 2 binary64)))
(sqrt.f64 x)
(/.f64 #s(literal 1 binary64) (pow.f64 (E.f64) (/.f64 (log.f64 x) #s(literal -2 binary64))))
(/.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (log.f64 x) #s(literal -2 binary64))))
(pow.f64 x #s(literal 1/2 binary64))
(pow.f64 (sqrt.f64 x) #s(literal 1 binary64))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (log.f64 x))
(pow.f64 (E.f64) (/.f64 (log.f64 x) #s(literal 2 binary64)))
(pow.f64 (/.f64 #s(literal 1 binary64) x) #s(literal -1/2 binary64))
(pow.f64 (pow.f64 (E.f64) #s(literal 1/2 binary64)) (log.f64 x))
(pow.f64 (*.f64 (exp.f64 #s(literal 1/8 binary64)) (exp.f64 #s(literal 3/8 binary64))) (log.f64 x))
(pow.f64 (*.f64 (exp.f64 #s(literal 3/8 binary64)) (exp.f64 #s(literal 1/8 binary64))) (log.f64 x))
(*.f64 (pow.f64 x #s(literal 1/8 binary64)) (pow.f64 x #s(literal 3/8 binary64)))
(*.f64 (pow.f64 x #s(literal 3/8 binary64)) (pow.f64 x #s(literal 1/8 binary64)))
(*.f64 (pow.f64 x #s(literal 3/32 binary64)) (pow.f64 x #s(literal 13/32 binary64)))
(*.f64 (pow.f64 x #s(literal 1/32 binary64)) (pow.f64 x #s(literal 15/32 binary64)))
(*.f64 (pow.f64 x #s(literal 9/32 binary64)) (pow.f64 x #s(literal 7/32 binary64)))
(*.f64 (pow.f64 x #s(literal 3/128 binary64)) (sqrt.f64 (pow.f64 x #s(literal 61/64 binary64))))
(*.f64 (pow.f64 x #s(literal 1/128 binary64)) (sqrt.f64 (pow.f64 x #s(literal 63/64 binary64))))
(*.f64 (pow.f64 x #s(literal 13/32 binary64)) (pow.f64 x #s(literal 3/32 binary64)))
(*.f64 (pow.f64 x #s(literal 9/128 binary64)) (sqrt.f64 (pow.f64 x #s(literal 55/64 binary64))))
(*.f64 (pow.f64 x #s(literal 27/128 binary64)) (sqrt.f64 (pow.f64 x #s(literal 37/64 binary64))))
(*.f64 (pow.f64 x #s(literal 7/32 binary64)) (pow.f64 x #s(literal 9/32 binary64)))
(*.f64 (pow.f64 x #s(literal 15/32 binary64)) (pow.f64 x #s(literal 1/32 binary64)))
(*.f64 (sqrt.f64 (pow.f64 x #s(literal 61/64 binary64))) (pow.f64 x #s(literal 3/128 binary64)))
(*.f64 (sqrt.f64 (pow.f64 x #s(literal 63/64 binary64))) (pow.f64 x #s(literal 1/128 binary64)))
(*.f64 (sqrt.f64 (pow.f64 x #s(literal 55/64 binary64))) (pow.f64 x #s(literal 9/128 binary64)))
(*.f64 (sqrt.f64 (pow.f64 x #s(literal 37/64 binary64))) (pow.f64 x #s(literal 27/128 binary64)))

simplify127.0ms (6%)

Algorithm
egg-herbie
Rules
2834×fma-define
1646×fnmadd-define
1070×sum3-define
982×fma-lowering-fma.f32
982×fma-lowering-fma.f64
Iterations

Useful iterations: 4 (0.0ms)

IterNodesCost
039336
187332
2221320
3521320
4931316
51327316
62469316
73419316
84249316
95087316
105342316
115347316
125350316
135350316
145499316
155503316
05503316
Stop Event
iter limit
saturated
Counts
60 → 60
Calls
Call 1
Inputs
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(pow (* 1 (pow x 3)) 1/4)
(pow (* 1 (pow x 3)) 1/4)
(pow (* 1 (pow x 3)) 1/4)
(pow (* 1 (pow x 3)) 1/4)
(pow (* 1 (pow x 3)) 1/4)
(pow (* 1 (pow x 3)) 1/4)
(pow (* 1 (pow x 3)) 1/4)
(pow (* 1 (pow x 3)) 1/4)
(exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))
(exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))
(exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))
(exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* 1 x) 1/4) (sqrt 2))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* 2 (sqrt x))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(sqrt x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
Outputs
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(*.f64 (*.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))) (pow.f64 #s(literal -1 binary64) #s(literal 5/4 binary64)))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(*.f64 (*.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))) (pow.f64 #s(literal -1 binary64) #s(literal 5/4 binary64)))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(*.f64 (*.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))) (pow.f64 #s(literal -1 binary64) #s(literal 5/4 binary64)))
(* -1 (* (pow -1 1/4) (* (* x (sqrt 2)) (sqrt (sqrt -1)))))
(*.f64 (*.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))) (pow.f64 #s(literal -1 binary64) #s(literal 5/4 binary64)))
(pow (* 1 (pow x 3)) 1/4)
(pow.f64 (*.f64 x (*.f64 x x)) #s(literal 1/4 binary64))
(pow (* 1 (pow x 3)) 1/4)
(pow.f64 (*.f64 x (*.f64 x x)) #s(literal 1/4 binary64))
(pow (* 1 (pow x 3)) 1/4)
(pow.f64 (*.f64 x (*.f64 x x)) #s(literal 1/4 binary64))
(pow (* 1 (pow x 3)) 1/4)
(pow.f64 (*.f64 x (*.f64 x x)) #s(literal 1/4 binary64))
(pow (* 1 (pow x 3)) 1/4)
(pow.f64 (*.f64 x (*.f64 x x)) #s(literal 1/4 binary64))
(pow (* 1 (pow x 3)) 1/4)
(pow.f64 (*.f64 x (*.f64 x x)) #s(literal 1/4 binary64))
(pow (* 1 (pow x 3)) 1/4)
(pow.f64 (*.f64 x (*.f64 x x)) #s(literal 1/4 binary64))
(pow (* 1 (pow x 3)) 1/4)
(pow.f64 (*.f64 x (*.f64 x x)) #s(literal 1/4 binary64))
(exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))
(*.f64 (pow.f64 #s(literal -1 binary64) #s(literal 1/4 binary64)) (pow.f64 (/.f64 #s(literal -1 binary64) x) #s(literal -3/4 binary64)))
(exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))
(*.f64 (pow.f64 #s(literal -1 binary64) #s(literal 1/4 binary64)) (pow.f64 (/.f64 #s(literal -1 binary64) x) #s(literal -3/4 binary64)))
(exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))
(*.f64 (pow.f64 #s(literal -1 binary64) #s(literal 1/4 binary64)) (pow.f64 (/.f64 #s(literal -1 binary64) x) #s(literal -3/4 binary64)))
(exp (* 1/4 (+ (log -1) (* -3 (log (/ -1 x))))))
(*.f64 (pow.f64 #s(literal -1 binary64) #s(literal 1/4 binary64)) (pow.f64 (/.f64 #s(literal -1 binary64) x) #s(literal -3/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* 1 x) 1/4) (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(*.f64 (pow.f64 (-.f64 #s(literal 0 binary64) x) #s(literal 1/4 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(*.f64 (pow.f64 (-.f64 #s(literal 0 binary64) x) #s(literal 1/4 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(*.f64 (pow.f64 (-.f64 #s(literal 0 binary64) x) #s(literal 1/4 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))))
(* (pow (* -1 x) 1/4) (* (sqrt (sqrt -1)) (sqrt 2)))
(*.f64 (pow.f64 (-.f64 #s(literal 0 binary64) x) #s(literal 1/4 binary64)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (sqrt.f64 #s(literal -1 binary64)))))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* 2 (sqrt x))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(* -2 (* (sqrt x) (pow (sqrt -1) 2)))
(*.f64 (sqrt.f64 x) #s(literal 2 binary64))
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(sqrt x)
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)
(* -1 (* (sqrt x) (pow (sqrt -1) 2)))
(sqrt.f64 x)

eval31.0ms (1.5%)

Compiler

Compiled 2244 to 431 computations (80.8% saved)

prune15.0ms (0.7%)

Pruning

2 alts after pruning (0 fresh and 2 done)

PrunedKeptTotal
New1810181
Fresh000
Picked011
Done011
Total1812183
Accuracy
100.0%
Counts
183 → 2
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.4%
(*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
Compiler

Compiled 45 to 25 computations (44.4% saved)

regimes7.0ms (0.3%)

Accuracy

Total -31.2b remaining (-798404.1%)

Threshold costs -31.2b (-798404.1%)

Counts
4 → 1
Calls
Call 1
Inputs
(hypot.f64 x x)
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(*.f64 (pow.f64 x #s(literal 3/4 binary64)) (sqrt.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x))))
(*.f64 (pow.f64 (*.f64 #s(literal 2 binary64) (sqrt.f64 x)) #s(literal 1/2 binary64)) (pow.f64 x #s(literal 3/4 binary64)))
Outputs
(hypot.f64 x x)
Calls

4 calls:

2.0ms
x
2.0ms
(*.f64 x x)
2.0ms
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
2.0ms
(+.f64 (*.f64 x x) (*.f64 x x))
Results
AccuracySegmentsBranch
100.0%1x
100.0%1(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
100.0%1(+.f64 (*.f64 x x) (*.f64 x x))
100.0%1(*.f64 x x)
Compiler

Compiled 23 to 10 computations (56.5% saved)

simplify35.0ms (1.7%)

Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
023
Stop Event
saturated
Calls
Call 1
Inputs
(hypot.f64 x x)
Outputs
(hypot.f64 x x)

soundness4.0ms (0.2%)

Rules
14×*-lowering-*.f32
14×*-lowering-*.f64
*-commutative
+-lowering-+.f64
count-2
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
043
1113
2143
3173
0173
Stop Event
done
iter limit
saturated
Compiler

Compiled 8 to 4 computations (50% saved)

preprocess20.0ms (0.9%)

Remove

(abs x)

Compiler

Compiled 42 to 20 computations (52.4% saved)

end0.0ms (0%)

Profiling

Loading profile data...