sqrt A (should all be same)

Time bar (total: 14.6s)

analyze0.0ms (0%)

Memory
0.5MiB live, 0.5MiB allocated
Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%100%0%0%0%0%0
100%100%0%0%0%0%0%1
Compiler

Compiled 10 to 4 computations (60% saved)

sample419.0ms (2.9%)

Memory
14.4MiB live, 883.3MiB allocated
Samples
301.0ms8 256×0valid
Precisions
Click to see histograms. Total time spent on operations: 169.0ms
ival-hypot: 159.0ms (94.2% of total)
ival-true: 6.0ms (3.6% of total)
ival-assert: 3.0ms (1.8% of total)
Bogosity

preprocess17.0ms (0.1%)

Memory
-5.1MiB live, 33.5MiB allocated
Algorithm
egg-herbie
Rules
42×associate-*r*
32×distribute-lft-neg-in
32×sub-neg
24×neg-sub0
22×distribute-lft-in
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0613
12113
26613
316613
424713
525613
625813
046
186
2116
3146
0143
Stop Event
iter limit
saturated
saturated
Calls
Call 1
Inputs
(sqrt (+ (* x x) (* x x)))
Outputs
(sqrt (+ (* x x) (* x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
Symmetry

(abs x)

explain70.0ms (0.5%)

Memory
-10.7MiB live, 117.8MiB allocated
FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
1270-1(1.1434135325736018e-156)(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
00-0-(+.f64 (*.f64 x x) (*.f64 x x))
00-0-(*.f64 x x)
00-0-x
Explanations
Click to see full explanations table
OperatorSubexpressionExplanationCount
sqrt.f64(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))oflow-rescue760
(+.f64 (*.f64 x x) (*.f64 x x))overflow76
(*.f64 x x)overflow152
sqrt.f64(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))uflow-rescue500
(+.f64 (*.f64 x x) (*.f64 x x))underflow50
(*.f64 x x)underflow100
Confusion
Predicted +Predicted -
+1261
-0129
Precision
1.0
Recall
0.9921259842519685
Confusion?
Predicted +Predicted MaybePredicted -
+12601
-00129
Precision?
1.0
Recall?
0.9921259842519685
Freqs
test
numberfreq
0130
1126
Total Confusion?
Predicted +Predicted MaybePredicted -
+100
-000
Precision?
1.0
Recall?
1.0
Samples
32.0ms512×0valid
Compiler

Compiled 60 to 20 computations (66.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 18.0ms
ival-hypot: 9.0ms (49.9% of total)
ival-mult: 6.0ms (33.3% of total)
ival-add: 2.0ms (11.1% of total)
ival-true: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

eval0.0ms (0%)

Memory
0.3MiB live, 0.3MiB allocated
Compiler

Compiled 1 to 1 computations (0% saved)

prune1.0ms (0%)

Memory
1.1MiB live, 1.1MiB allocated
Alt Table
Click to see full alt table
StatusAccuracyProgram
54.1%
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Compiler

Compiled 9 to 4 computations (55.6% saved)

simplify3.0ms (0%)

Memory
4.4MiB live, 4.4MiB allocated
Algorithm
egg-herbie
Localize:

Found 3 expressions of interest:

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

Useful iterations: 0 (0.0ms)

IterNodesCost
0415
1815
21115
31415
01412
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(sqrt (+ (* x x) (* x x)))
(+ (* x x) (* x x))
(* x x)
x
Outputs
(sqrt (+ (* x x) (* x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(+ (* x x) (* x x))
(*.f64 x (+.f64 x x))
(* x x)
(*.f64 x x)
x

localize23.0ms (0.2%)

Memory
-9.3MiB live, 29.8MiB allocated
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 x x)
accuracy100.0%
(+.f64 (*.f64 x x) (*.f64 x x))
accuracy54.1%
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Samples
17.0ms256×0valid
Compiler

Compiled 21 to 6 computations (71.4% saved)

Precisions
Click to see histograms. Total time spent on operations: 7.0ms
ival-hypot: 4.0ms (55.5% of total)
ival-mult: 2.0ms (27.7% of total)
ival-add: 1.0ms (13.9% of total)
ival-true: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series3.0ms (0%)

Memory
4.3MiB live, 4.3MiB allocated
Counts
3 → 36
Calls
Call 1
Inputs
#<alt (+ (* x x) (* x x))>
#<alt (sqrt (+ (* x x) (* x x)))>
#<alt (* x x)>
Outputs
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 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 (* x (sqrt 2))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
Calls

9 calls:

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

rewrite47.0ms (0.3%)

Memory
8.6MiB live, 47.4MiB allocated
Algorithm
batch-egg-rewrite
Rules
66×*-lowering-*.f32
66×*-lowering-*.f64
42×accelerator-lowering-fma.f32
42×accelerator-lowering-fma.f64
34×/-lowering-/.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0414
12010
01579
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
3 → 33
Calls
Call 1
Inputs
(+ (* x x) (* x x))
(sqrt (+ (* x x) (* x x)))
(* x x)
Outputs
(+.f64 (*.f64 x x) (*.f64 x x))
(-.f64 (/.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)))
(fma.f64 x x (*.f64 x x))
(fma.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)) (*.f64 x x))
(/.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (*.f64 x (+.f64 x x))) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))
(/.f64 #s(literal 0 binary64) #s(literal 0 binary64))
(/.f64 (neg.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (*.f64 x (+.f64 x x)))) (neg.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(/.f64 #s(literal 1 binary64) (*.f64 x (+.f64 x x)))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (*.f64 x (+.f64 x x)))))
(*.f64 x (+.f64 x x))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (*.f64 x (+.f64 x x))) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(*.f64 #s(literal 0 binary64) (/.f64 #s(literal 1 binary64) #s(literal 0 binary64)))
(*.f64 (+.f64 x x) x)
(exp.f64 (*.f64 (log.f64 (*.f64 x (+.f64 x x))) #s(literal 1/2 binary64)))
(hypot.f64 x x)
(hypot.f64 x (pow.f64 x #s(literal 1 binary64)))
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) x)
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (*.f64 x (+.f64 x x)))) (sqrt.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(/.f64 (sqrt.f64 #s(literal 0 binary64)) (sqrt.f64 #s(literal 0 binary64)))
(pow.f64 (*.f64 x (+.f64 x x)) #s(literal 1/2 binary64))
(*.f64 (pow.f64 x #s(literal 1/2 binary64)) (pow.f64 (+.f64 x x) #s(literal 1/2 binary64)))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/2 binary64)) (pow.f64 (*.f64 x x) #s(literal 1/2 binary64)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (*.f64 x x)))
(*.f64 (pow.f64 (*.f64 x (+.f64 x x)) #s(literal 1/4 binary64)) (pow.f64 (*.f64 x (+.f64 x x)) #s(literal 1/4 binary64)))
(exp.f64 (*.f64 (log.f64 x) #s(literal 2 binary64)))
(pow.f64 x #s(literal 2 binary64))
(*.f64 x x)
(*.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)))

simplify11.0ms (0.1%)

Memory
-11.4MiB live, 26.7MiB allocated
Algorithm
egg-herbie
Rules
38×*-lowering-*.f32
38×*-lowering-*.f64
38×accelerator-lowering-fma.f32
38×accelerator-lowering-fma.f64
36×+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
08148
115148
232148
337148
441148
553148
665148
776148
896148
9101148
0101148
Stop Event
iter limit
saturated
Counts
36 → 36
Calls
Call 1
Inputs
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 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)))
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
Outputs
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 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)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)

eval8.0ms (0.1%)

Memory
22.4MiB live, 22.3MiB allocated
Compiler

Compiled 702 to 94 computations (86.6% saved)

prune8.0ms (0.1%)

Memory
-27.2MiB live, 13.0MiB allocated
Pruning

4 alts after pruning (4 fresh and 0 done)

PrunedKeptTotal
New81485
Fresh000
Picked101
Done000
Total82486
Accuracy
100.0%
Counts
86 → 4
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.5%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
54.1%
(sqrt.f64 (*.f64 (+.f64 x x) x))
Compiler

Compiled 24 to 15 computations (37.5% saved)

simplify4.0ms (0%)

Memory
5.4MiB live, 5.4MiB allocated
Algorithm
egg-herbie
Localize:

Found 10 expressions of interest:

NewMetricScoreProgram
cost-diff5312
(hypot.f64 x x)
cost-diff0
(+.f64 x x)
cost-diff0
(sqrt.f64 (+.f64 x x))
cost-diff0
(sqrt.f64 x)
cost-diff0
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
cost-diff0
(sqrt.f64 #s(literal 2 binary64))
cost-diff0
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
cost-diff0
(+.f64 x x)
cost-diff0
(*.f64 (+.f64 x x) x)
cost-diff0
(sqrt.f64 (*.f64 (+.f64 x x) x))
Rules
22×*-lowering-*.f32
22×*-lowering-*.f64
10×*-commutative
sqrt-lowering-sqrt.f64
sqrt-lowering-sqrt.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01347
11847
22147
02141
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(sqrt (* (+ x x) x))
(* (+ x x) x)
(+ x x)
x
(* x (sqrt 2))
x
(sqrt 2)
2
(* (sqrt x) (sqrt (+ x x)))
(sqrt x)
x
(sqrt (+ x x))
(+ x x)
(sqrt (+ (* x x) (* x x)))
x
Outputs
(sqrt (* (+ x x) x))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(* (+ x x) x)
(*.f64 x (+.f64 x x))
(+ x x)
(+.f64 x x)
x
(* x (sqrt 2))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
x
(sqrt 2)
(sqrt.f64 #s(literal 2 binary64))
2
#s(literal 2 binary64)
(* (sqrt x) (sqrt (+ x x)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(sqrt x)
(sqrt.f64 x)
x
(sqrt (+ x x))
(sqrt.f64 (+.f64 x x))
(+ x x)
(+.f64 x x)
(sqrt (+ (* x x) (* x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
x

localize41.0ms (0.3%)

Memory
0.9MiB live, 76.5MiB allocated
Localize:

Found 10 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(hypot.f64 x x)
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(sqrt.f64 (+.f64 x x))
accuracy100.0%
(sqrt.f64 x)
accuracy99.5%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
accuracy100.0%
(sqrt.f64 #s(literal 2 binary64))
accuracy99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(*.f64 (+.f64 x x) x)
accuracy54.1%
(sqrt.f64 (*.f64 (+.f64 x x) x))
Samples
28.0ms256×0valid
Compiler

Compiled 46 to 13 computations (71.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 17.0ms
ival-sqrt: 6.0ms (35.6% of total)
ival-mult: 4.0ms (23.8% of total)
ival-hypot: 4.0ms (23.8% of total)
ival-add: 1.0ms (5.9% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series5.0ms (0%)

Memory
10.3MiB live, 10.3MiB allocated
Counts
9 → 96
Calls
Call 1
Inputs
#<alt (sqrt (* (+ x x) x))>
#<alt (* (+ x x) x)>
#<alt (+ x x)>
#<alt (* x (sqrt 2))>
#<alt (sqrt 2)>
#<alt (* (sqrt x) (sqrt (+ x x)))>
#<alt (sqrt x)>
#<alt (sqrt (+ x x))>
#<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)))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<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 (* 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 (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* x (sqrt 2))>
#<alt (* -1 (* x (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* x (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* x (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* x (* (sqrt -2) (sqrt -1))))>
#<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)))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<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

24 calls:

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

rewrite33.0ms (0.2%)

Memory
17.2MiB live, 52.9MiB allocated
Algorithm
batch-egg-rewrite
Rules
98×*-lowering-*.f32
98×*-lowering-*.f64
68×accelerator-lowering-fma.f32
68×accelerator-lowering-fma.f64
58×/-lowering-/.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01342
14130
024326
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
9 → 126
Calls
Call 1
Inputs
(sqrt (* (+ x x) x))
(* (+ x x) x)
(+ x x)
(* x (sqrt 2))
(sqrt 2)
(* (sqrt x) (sqrt (+ x x)))
(sqrt x)
(sqrt (+ x x))
(sqrt (+ (* x x) (* x x)))
Outputs
(exp.f64 (*.f64 (log.f64 (+.f64 x x)) #s(literal 1/2 binary64)))
(hypot.f64 x x)
(hypot.f64 x (pow.f64 x #s(literal 1 binary64)))
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) x)
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)))
(sqrt.f64 (+.f64 x x))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 x x #s(literal 0 binary64))))
(/.f64 (sqrt.f64 #s(literal 0 binary64)) (sqrt.f64 #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(pow.f64 (+.f64 x x) #s(literal 1/2 binary64))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 (*.f64 x x) #s(literal 1/2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (*.f64 x x)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
(*.f64 (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)) (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)))
(+.f64 x x)
(+.f64 (*.f64 x x) (*.f64 x x))
(-.f64 (/.f64 (*.f64 x x) #s(literal 0 binary64)) (/.f64 (*.f64 x x) #s(literal 0 binary64)))
(-.f64 (/.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)))
(fma.f64 x x (*.f64 x x))
(fma.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)) (*.f64 x x))
(/.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 #s(literal 0 binary64) #s(literal 0 binary64))
(/.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))
(/.f64 (neg.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (neg.f64 (fma.f64 x x #s(literal 0 binary64))))
(/.f64 (neg.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (neg.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(/.f64 #s(literal 1 binary64) (+.f64 x x))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 x x #s(literal 0 binary64)) (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))))
(/.f64 (*.f64 x (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 #s(literal 0 binary64) x) #s(literal 0 binary64))
(*.f64 x #s(literal 2 binary64))
(*.f64 x (+.f64 x x))
(*.f64 #s(literal 2 binary64) x)
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 (+.f64 x x) x)
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 x x #s(literal 0 binary64))))
(*.f64 #s(literal 0 binary64) (/.f64 #s(literal 1 binary64) #s(literal 0 binary64)))
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(+.f64 x x)
(+.f64 (*.f64 x x) (*.f64 x x))
(-.f64 (/.f64 (*.f64 x x) #s(literal 0 binary64)) (/.f64 (*.f64 x x) #s(literal 0 binary64)))
(-.f64 (/.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)) (/.f64 (*.f64 (*.f64 x x) (*.f64 x x)) #s(literal 0 binary64)))
(fma.f64 x x (*.f64 x x))
(fma.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)) (*.f64 x x))
(/.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 #s(literal 0 binary64) #s(literal 0 binary64))
(/.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))
(/.f64 (neg.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (neg.f64 (fma.f64 x x #s(literal 0 binary64))))
(/.f64 (neg.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (neg.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(/.f64 #s(literal 1 binary64) (+.f64 x x))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 x x #s(literal 0 binary64)) (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))))
(/.f64 #s(literal 1 binary64) (/.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))))
(/.f64 (*.f64 x (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 #s(literal 0 binary64) x) #s(literal 0 binary64))
(*.f64 x #s(literal 2 binary64))
(*.f64 x (+.f64 x x))
(*.f64 #s(literal 2 binary64) x)
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 (+.f64 x x) x)
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 x x #s(literal 0 binary64))))
(*.f64 #s(literal 0 binary64) (/.f64 #s(literal 1 binary64) #s(literal 0 binary64)))
(*.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x)) (/.f64 #s(literal 1 binary64) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
(sqrt.f64 #s(literal 2 binary64))
(pow.f64 #s(literal 2 binary64) #s(literal 1/2 binary64))
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)))
(exp.f64 (*.f64 (log.f64 (+.f64 x x)) #s(literal 1/2 binary64)))
(hypot.f64 x x)
(hypot.f64 x (pow.f64 x #s(literal 1 binary64)))
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) x)
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)))
(sqrt.f64 (+.f64 x x))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 x x #s(literal 0 binary64))))
(/.f64 (sqrt.f64 #s(literal 0 binary64)) (sqrt.f64 #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(pow.f64 (+.f64 x x) #s(literal 1/2 binary64))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 (*.f64 x x) #s(literal 1/2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (*.f64 x x)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
(*.f64 (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)) (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)))
(exp.f64 (*.f64 (log.f64 x) #s(literal 1/2 binary64)))
(sqrt.f64 x)
(pow.f64 x #s(literal 1/2 binary64))
(*.f64 (pow.f64 x #s(literal 1/4 binary64)) (pow.f64 x #s(literal 1/4 binary64)))
(exp.f64 (*.f64 (log.f64 (+.f64 x x)) #s(literal 1/2 binary64)))
(hypot.f64 x x)
(hypot.f64 x (pow.f64 x #s(literal 1 binary64)))
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) x)
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)))
(sqrt.f64 (+.f64 x x))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 x x #s(literal 0 binary64))))
(/.f64 (sqrt.f64 #s(literal 0 binary64)) (sqrt.f64 #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(pow.f64 (+.f64 x x) #s(literal 1/2 binary64))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 (*.f64 x x) #s(literal 1/2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (*.f64 x x)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
(*.f64 (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)) (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)))
(exp.f64 (*.f64 (log.f64 (+.f64 x x)) #s(literal 1/2 binary64)))
(hypot.f64 x x)
(hypot.f64 x (pow.f64 x #s(literal 1 binary64)))
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) x)
(hypot.f64 (pow.f64 x #s(literal 1 binary64)) (pow.f64 x #s(literal 1 binary64)))
(sqrt.f64 (+.f64 x x))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 x x #s(literal 0 binary64))))
(/.f64 (sqrt.f64 #s(literal 0 binary64)) (sqrt.f64 #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)) (+.f64 x x))) (sqrt.f64 (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64))))
(pow.f64 (+.f64 x x) #s(literal 1/2 binary64))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (pow.f64 (*.f64 x x) #s(literal 1/2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 (*.f64 x x)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(*.f64 (sqrt.f64 (+.f64 x x)) (sqrt.f64 x))
(*.f64 (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)) (pow.f64 (+.f64 x x) #s(literal 1/4 binary64)))

simplify176.0ms (1.2%)

Memory
-19.8MiB live, 176.1MiB allocated
Algorithm
egg-herbie
Rules
1 478×associate-*r*
1 232×*-lowering-*.f32
1 232×*-lowering-*.f64
1 232×accelerator-lowering-fma.f32
1 232×accelerator-lowering-fma.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
022412
150412
2136412
3265412
4490412
5809412
61411412
71537412
81592412
91630412
101808412
112022412
122068412
132096412
142100412
152100412
162246412
172430412
183585412
193703412
203727412
213735412
223739412
233743412
243855412
253903412
263903412
274085412
04085412
Stop Event
iter limit
saturated
Counts
96 → 96
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)))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* x (sqrt 2))
(* 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) (sqrt -1))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(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)))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* 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)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #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)))
(* 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)))
(* 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) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* x (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 x (sqrt.f64 #s(literal -1 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)
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x))))
(* 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)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))

eval23.0ms (0.2%)

Memory
25.4MiB live, 64.1MiB allocated
Compiler

Compiled 2 297 to 230 computations (90% saved)

prune17.0ms (0.1%)

Memory
-29.1MiB live, 48.3MiB allocated
Pruning

6 alts after pruning (2 fresh and 4 done)

PrunedKeptTotal
New2582260
Fresh000
Picked044
Done000
Total2586264
Accuracy
100.0%
Counts
264 → 6
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.5%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
26.4%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64))))
7.0%
(sqrt.f64 (+.f64 x x))
54.1%
(sqrt.f64 (*.f64 (+.f64 x x) x))
Compiler

Compiled 46 to 26 computations (43.5% saved)

simplify359.0ms (2.5%)

Memory
4.0MiB live, 340.4MiB allocated
Algorithm
egg-herbie
Localize:

Found 6 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
cost-diff0
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64))))
cost-diff64
(fma.f64 x x #s(literal 0 binary64))
cost-diff1664
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))
cost-diff0
(+.f64 x x)
cost-diff0
(sqrt.f64 (+.f64 x x))
Rules
7 074×accelerator-lowering-fma.f32
7 074×accelerator-lowering-fma.f64
6 400×*-lowering-*.f32
6 400×*-lowering-*.f64
2 090×cube-prod
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01059
12451
28545
324037
438037
599937
6205337
7256137
8349337
9483637
10521637
11536037
12667637
13698237
14710637
0804534
Stop Event
iter limit
node limit
Calls
Call 1
Inputs
(sqrt (+ x x))
(+ x x)
x
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0)))
(/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0))
(* (* (+ (* x x) 0) (+ x x)) x)
(* (+ (* x x) 0) (+ x x))
(+ (* x x) 0)
x
0
(+ x x)
Outputs
(sqrt (+ x x))
(sqrt.f64 (+.f64 x x))
(+ x x)
(+.f64 x x)
x
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0))
(*.f64 x (+.f64 x x))
(* (* (+ (* x x) 0) (+ x x)) x)
(*.f64 (+.f64 x x) (*.f64 x (*.f64 x x)))
(* (+ (* x x) 0) (+ x x))
(*.f64 x (*.f64 x (+.f64 x x)))
(+ (* x x) 0)
(*.f64 x x)
x
0
#s(literal 0 binary64)
(+ x x)
(+.f64 x x)

localize12.5s (85.9%)

Memory
-7.1MiB live, 34.4MiB allocated
Localize:

Found 6 expressions of interest:

NewMetricScoreProgram
accuracy99.9%
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
accuracy99.9%
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
accuracy54.1%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64))))
accuracy33.6%
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(sqrt.f64 (+.f64 x x))
Samples
12.5s256×0valid
Compiler

Compiled 68 to 12 computations (82.4% saved)

Precisions
Click to see histograms. Total time spent on operations: 12.5s
ival-mult: 12.5s (99.9% of total)
ival-add: 3.0ms (0% of total)
ival-sqrt: 3.0ms (0% of total)
ival-div: 2.0ms (0% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series3.0ms (0%)

Memory
4.0MiB live, 4.0MiB allocated
Counts
7 → 84
Calls
Call 1
Inputs
#<alt (sqrt (+ x x))>
#<alt (+ x x)>
#<alt (/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0))>
#<alt (+ (* x x) 0)>
#<alt (sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0)))>
#<alt (* (* (+ (* x x) 0) (+ x x)) x)>
#<alt (* (+ (* x x) 0) (+ x x))>
Outputs
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* (sqrt x) (sqrt 2))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 x)>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 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 (* x (sqrt 2))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
Calls

21 calls:

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

rewrite62.0ms (0.4%)

Memory
28.9MiB live, 78.4MiB allocated
Algorithm
batch-egg-rewrite
Rules
114×/-lowering-/.f32
114×/-lowering-/.f64
88×*-lowering-*.f32
88×*-lowering-*.f64
64×accelerator-lowering-fma.f32
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01027
1659
06799
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
7 → 28
Calls
Call 1
Inputs
(sqrt (+ x x))
(+ x x)
(/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0))
(+ (* x x) 0)
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (+ (* x x) 0)))
(* (* (+ (* x x) 0) (+ x x)) x)
(* (+ (* x x) 0) (+ x x))
Outputs
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)
(+.f64 (*.f64 x x) #s(literal 0 binary64))
(+.f64 #s(literal 0 binary64) (*.f64 x x))
(exp.f64 (*.f64 (log.f64 x) #s(literal 2 binary64)))
(-.f64 (*.f64 x x) #s(literal 0 binary64))
(-.f64 (fma.f64 x x (*.f64 x x)) (*.f64 x x))
(fma.f64 x x #s(literal 0 binary64))
(fma.f64 (fabs.f64 x) (fabs.f64 x) #s(literal 0 binary64))
(fma.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 0 binary64))
(fma.f64 (*.f64 x (*.f64 x (*.f64 x x))) (/.f64 #s(literal 1 binary64) (*.f64 x x)) #s(literal 0 binary64))
(/.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (*.f64 x (*.f64 x (*.f64 x x))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x))))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 x x))
(/.f64 (neg.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x))))) (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))) (neg.f64 (*.f64 x x)))
(/.f64 (-.f64 #s(literal 0 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) (neg.f64 (*.f64 x x)))
(/.f64 (-.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 0 binary64)) (*.f64 x (*.f64 x (*.f64 x x))))
(pow.f64 x #s(literal 2 binary64))
(*.f64 x x)
(*.f64 (fabs.f64 x) (fabs.f64 x))
(*.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))))
(*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (/.f64 #s(literal 1 binary64) (*.f64 x x)))
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)

simplify32.0ms (0.2%)

Memory
-3.7MiB live, 35.2MiB allocated
Algorithm
egg-herbie
Rules
162×*-lowering-*.f32
162×*-lowering-*.f64
158×accelerator-lowering-fma.f32
158×accelerator-lowering-fma.f64
104×+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
023380
144380
296380
3155380
4172380
5218380
6263380
7294380
8363380
9383380
10383380
0383380
Stop Event
iter limit
saturated
Counts
84 → 84
Calls
Call 1
Inputs
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* (sqrt x) (sqrt 2))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 x)
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(* 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)))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
Outputs
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(neg.f64 (*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(neg.f64 (*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(neg.f64 (*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(neg.f64 (*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (sqrt.f64 #s(literal -1 binary64)))))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(* 2 (pow x 2))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(* 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)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 #s(literal 2 binary64) (*.f64 x x)))

eval13.0ms (0.1%)

Memory
22.1MiB live, 22.1MiB allocated
Compiler

Compiled 2 185 to 212 computations (90.3% saved)

prune26.0ms (0.2%)

Memory
-59.7MiB live, 18.6MiB allocated
Pruning

7 alts after pruning (2 fresh and 5 done)

PrunedKeptTotal
New1572159
Fresh000
Picked112
Done044
Total1587165
Accuracy
100.0%
Counts
165 → 7
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.5%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
26.4%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
7.0%
(sqrt.f64 (+.f64 x x))
54.1%
(sqrt.f64 (*.f64 (+.f64 x x) x))
3.5%
#s(literal 0 binary64)
Compiler

Compiled 47 to 29 computations (38.3% saved)

simplify340.0ms (2.3%)

Memory
17.6MiB live, 447.1MiB allocated
Algorithm
egg-herbie
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
cost-diff0
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
cost-diff64
(fma.f64 x x #s(literal 0 binary64))
cost-diff1664
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x))
Rules
6 778×*-lowering-*.f32
6 778×*-lowering-*.f64
5 432×accelerator-lowering-fma.f32
5 432×accelerator-lowering-fma.f64
2 302×cube-prod
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0955
12943
29533
326233
462933
5222333
6336233
7395433
8492033
9633933
10675933
11692533
12705533
13719233
14733833
0835130
Stop Event
iter limit
node limit
Calls
Call 1
Inputs
0
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x)))
(/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x))
(* (* (+ (* x x) 0) (+ x x)) x)
(* (+ (* x x) 0) (+ x x))
(+ (* x x) 0)
x
0
(+ x x)
(* x x)
Outputs
0
#s(literal 0 binary64)
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x))
(*.f64 x (+.f64 x x))
(* (* (+ (* x x) 0) (+ x x)) x)
(*.f64 x (*.f64 x (*.f64 x (+.f64 x x))))
(* (+ (* x x) 0) (+ x x))
(*.f64 x (*.f64 x (+.f64 x x)))
(+ (* x x) 0)
(*.f64 x x)
x
0
#s(literal 0 binary64)
(+ x x)
(+.f64 x x)
(* x x)
(*.f64 x x)

localize35.0ms (0.2%)

Memory
1.1MiB live, 79.2MiB allocated
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
accuracy99.9%
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
accuracy99.9%
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
accuracy54.1%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
accuracy33.6%
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x))
Samples
23.0ms256×0valid
Compiler

Compiled 62 to 11 computations (82.3% saved)

Precisions
Click to see histograms. Total time spent on operations: 15.0ms
ival-mult: 9.0ms (60.5% of total)
ival-div: 2.0ms (13.4% of total)
ival-add: 2.0ms (13.4% of total)
ival-sqrt: 2.0ms (13.4% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series1.0ms (0%)

Memory
2.8MiB live, 2.8MiB allocated
Counts
5 → 60
Calls
Call 1
Inputs
#<alt (/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x))>
#<alt (+ (* x x) 0)>
#<alt (sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x)))>
#<alt (* (* (+ (* x x) 0) (+ x x)) x)>
#<alt (* (+ (* x x) 0) (+ x x))>
Outputs
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (* 2 (pow x 2))>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 2)>
#<alt (pow x 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 (* x (sqrt 2))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* -1 (* x (sqrt 2)))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 4))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
#<alt (* 2 (pow x 3))>
Calls

15 calls:

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

rewrite38.0ms (0.3%)

Memory
5.3MiB live, 81.8MiB allocated
Algorithm
batch-egg-rewrite
Rules
110×/-lowering-/.f32
110×/-lowering-/.f64
88×*-lowering-*.f32
88×*-lowering-*.f64
64×accelerator-lowering-fma.f32
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0955
1637
07107
Stop Event
iter limit
iter limit
iter limit
unsound
Counts
5 → 26
Calls
Call 1
Inputs
(/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x))
(+ (* x x) 0)
(sqrt (/ (* (* (+ (* x x) 0) (+ x x)) x) (* x x)))
(* (* (+ (* x x) 0) (+ x x)) x)
(* (+ (* x x) 0) (+ x x))
Outputs
#s(literal 0 binary64)
(+.f64 (*.f64 x x) #s(literal 0 binary64))
(+.f64 #s(literal 0 binary64) (*.f64 x x))
(exp.f64 (*.f64 (log.f64 x) #s(literal 2 binary64)))
(-.f64 (*.f64 x x) #s(literal 0 binary64))
(-.f64 (fma.f64 x x (*.f64 x x)) (*.f64 x x))
(fma.f64 x x #s(literal 0 binary64))
(fma.f64 (fabs.f64 x) (fabs.f64 x) #s(literal 0 binary64))
(fma.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 0 binary64))
(fma.f64 (*.f64 x (*.f64 x (*.f64 x x))) (/.f64 #s(literal 1 binary64) (*.f64 x x)) #s(literal 0 binary64))
(/.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (*.f64 x (*.f64 x (*.f64 x x))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x))))))
(/.f64 #s(literal 1 binary64) (/.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (*.f64 x (*.f64 x (*.f64 x x))) (*.f64 x x))
(/.f64 (neg.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x))))) (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))))
(/.f64 (neg.f64 (*.f64 x (*.f64 x (*.f64 x x)))) (neg.f64 (*.f64 x x)))
(/.f64 (-.f64 #s(literal 0 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) (neg.f64 (*.f64 x x)))
(/.f64 (-.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 0 binary64)) (*.f64 x (*.f64 x (*.f64 x x))))
(pow.f64 x #s(literal 2 binary64))
(*.f64 x x)
(*.f64 (fabs.f64 x) (fabs.f64 x))
(*.f64 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) (/.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (*.f64 x x)))))
(*.f64 (*.f64 x (*.f64 x (*.f64 x x))) (/.f64 #s(literal 1 binary64) (*.f64 x x)))
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)

simplify16.0ms (0.1%)

Memory
-4.8MiB live, 35.4MiB allocated
Algorithm
egg-herbie
Rules
58×*-lowering-*.f32
58×*-lowering-*.f64
54×accelerator-lowering-fma.f32
54×accelerator-lowering-fma.f64
44×+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
014268
125268
248268
359268
463268
575268
687268
798268
8126268
9138268
0138268
Stop Event
iter limit
saturated
Counts
60 → 60
Calls
Call 1
Inputs
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(* 2 (pow x 2))
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(pow x 2)
(* 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)))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 4))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
(* 2 (pow x 3))
Outputs
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(* 2 (pow x 2))
(*.f64 x (*.f64 #s(literal 2 binary64) x))
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(pow x 2)
(*.f64 x x)
(* 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)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* -1 (* x (sqrt 2)))
(neg.f64 (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 4))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 #s(literal 2 binary64) x)))

eval7.0ms (0.1%)

Memory
19.7MiB live, 19.7MiB allocated
Compiler

Compiled 1 094 to 152 computations (86.1% saved)

prune8.0ms (0.1%)

Memory
-17.2MiB live, 20.5MiB allocated
Pruning

7 alts after pruning (1 fresh and 6 done)

PrunedKeptTotal
New85186
Fresh000
Picked112
Done055
Total86793
Accuracy
100.0%
Counts
93 → 7
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.5%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.3%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
26.4%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 x x) (+.f64 x x)) x) (*.f64 x x)))
7.0%
(sqrt.f64 (+.f64 x x))
54.1%
(sqrt.f64 (*.f64 (+.f64 x x) x))
3.5%
#s(literal 0 binary64)
Compiler

Compiled 125 to 53 computations (57.6% saved)

regimes16.0ms (0.1%)

Memory
-8.6MiB live, 29.3MiB allocated
Counts
10 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 (*.f64 (+.f64 x x) x))
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 x x) (+.f64 x x)) x) (*.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64))))
(hypot.f64 x x)
Outputs
(hypot.f64 x x)
Calls

4 calls:

5.0ms
x
3.0ms
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
3.0ms
(*.f64 x x)
3.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)

regimes13.0ms (0.1%)

Memory
28.6MiB live, 28.6MiB allocated
Counts
9 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 (*.f64 (+.f64 x x) x))
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 x x) (+.f64 x x)) x) (*.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64))))
Outputs
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
Calls

4 calls:

3.0ms
x
3.0ms
(*.f64 x x)
3.0ms
(+.f64 (*.f64 x x) (*.f64 x x))
3.0ms
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Results
AccuracySegmentsBranch
99.5%1x
99.5%1(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
99.5%1(+.f64 (*.f64 x x) (*.f64 x x))
99.5%1(*.f64 x x)
Compiler

Compiled 23 to 10 computations (56.5% saved)

regimes11.0ms (0.1%)

Memory
-15.2MiB live, 22.4MiB allocated
Counts
5 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 (*.f64 (+.f64 x x) x))
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Outputs
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
Calls

4 calls:

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

Compiled 23 to 10 computations (56.5% saved)

regimes6.0ms (0%)

Memory
23.4MiB live, 23.4MiB allocated
Counts
2 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
Outputs
(sqrt.f64 (+.f64 x x))
Calls

4 calls:

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

Compiled 23 to 10 computations (56.5% saved)

regimes20.0ms (0.1%)

Memory
-25.2MiB live, 19.6MiB allocated
Accuracy

Total 0.0b remaining (0%)

Threshold costs 0b (0%)

Counts
1 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
Outputs
#s(literal 0 binary64)
Calls

4 calls:

16.0ms
x
1.0ms
(*.f64 x x)
1.0ms
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
1.0ms
(+.f64 (*.f64 x x) (*.f64 x x))
Results
AccuracySegmentsBranch
3.5%1(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
3.5%1(+.f64 (*.f64 x x) (*.f64 x x))
3.5%1(*.f64 x x)
3.5%1x
Compiler

Compiled 23 to 10 computations (56.5% saved)

simplify7.0ms (0%)

Memory
16.3MiB live, 16.3MiB allocated
Algorithm
egg-herbie
Rules
*-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01019
11219
Stop Event
saturated
Calls
Call 1
Inputs
(hypot.f64 x x)
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 (+.f64 x x))
#s(literal 0 binary64)
Outputs
(hypot.f64 x x)
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 (+.f64 x x))
#s(literal 0 binary64)

soundness95.0ms (0.6%)

Memory
16.2MiB live, 127.3MiB allocated
Rules
114×/-lowering-/.f32
114×/-lowering-/.f64
98×*-lowering-*.f32
98×*-lowering-*.f64
88×*-lowering-*.f32
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01027
1659
06799
01342
14130
024326
0414
12010
01579
08148
115148
232148
337148
441148
553148
665148
776148
896148
9101148
0101148
Stop Event
fuel
iter limit
saturated
iter limit
iter limit
iter limit
unsound
iter limit
iter limit
iter limit
unsound
iter limit
iter limit
iter limit
unsound
Compiler

Compiled 63 to 37 computations (41.3% saved)

preprocess41.0ms (0.3%)

Memory
-30.6MiB live, 90.8MiB allocated
Remove

(abs x)

Compiler

Compiled 66 to 32 computations (51.5% saved)

end0.0ms (0%)

Memory
0.0MiB live, 0.0MiB allocated

Profiling

Loading profile data...