sqrt A (should all be same)

Time bar (total: 2.3s)

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)

sample464.0ms (20.1%)

Memory
-7.2MiB live, 932.9MiB allocated
Samples
304.0ms8 256×0valid
Precisions
Click to see histograms. Total time spent on operations: 156.0ms
ival-hypot: 147.0ms (94.5% of total)
ival-true: 6.0ms (3.9% of total)
ival-assert: 3.0ms (1.9% of total)
Bogosity

preprocess23.0ms (1%)

Memory
-10.9MiB live, 30.7MiB 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
048
076
1116
2146
3176
0173
Stop Event
iter limit
saturated
iter limit
saturated
Calls
Call 1
Inputs
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Outputs
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
Symmetry

(abs x)

explain83.0ms (3.6%)

Memory
29.6MiB live, 68.6MiB allocated
FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
1290-4(7.847351984257393e-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-rescue830
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))overflow1
(+.f64 (*.f64 x x) (*.f64 x x))overflow84
(*.f64 x x)overflow168
sqrt.f64(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))uflow-rescue420
(+.f64 (*.f64 x x) (*.f64 x x))underflow42
(*.f64 x x)underflow84
Confusion
Predicted +Predicted -
+1254
-0127
Precision
1.0
Recall
0.9689922480620154
Confusion?
Predicted +Predicted MaybePredicted -
+12504
-00127
Precision?
1.0
Recall?
0.9689922480620154
Freqs
test
numberfreq
0131
1125
Total Confusion?
Predicted +Predicted MaybePredicted -
+100
-000
Precision?
1.0
Recall?
1.0
Samples
25.0ms512×0valid
Compiler

Compiled 60 to 20 computations (66.7% saved)

Precisions
Click to see histograms. Total time spent on operations: 14.0ms
ival-hypot: 8.0ms (55.7% of total)
ival-mult: 3.0ms (20.9% of total)
ival-add: 2.0ms (13.9% of total)
ival-true: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

eval0.0ms (0%)

Memory
0.2MiB live, 0.2MiB allocated
Compiler

Compiled 1 to 1 computations (0% saved)

prune1.0ms (0%)

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

Compiled 9 to 4 computations (55.6% saved)

simplify4.0ms (0.2%)

Memory
3.0MiB live, 3.0MiB 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×lower-*.f32
12×lower-*.f64
*-commutative
count-2
associate-*r*
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0419
0715
11115
21415
31715
01712
Stop Event
iter limit
saturated
iter limit
Calls
Call 1
Inputs
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(+.f64 (*.f64 x x) (*.f64 x x))
(*.f64 x x)
x
Outputs
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(+.f64 (*.f64 x x) (*.f64 x x))
(*.f64 x (+.f64 x x))
(*.f64 x x)
x

localize20.0ms (0.9%)

Memory
-17.6MiB live, 21.0MiB allocated
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 x x)
accuracy100.0%
(+.f64 (*.f64 x x) (*.f64 x x))
accuracy53.7%
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
Samples
14.0ms256×0valid
Compiler

Compiled 21 to 6 computations (71.4% saved)

Precisions
Click to see histograms. Total time spent on operations: 9.0ms
ival-hypot: 6.0ms (70.2% of total)
ival-mult: 2.0ms (23.4% of total)
ival-add: 1.0ms (11.7% of total)
ival-true: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series3.0ms (0.1%)

Memory
5.3MiB live, 5.3MiB allocated
Counts
3 → 36
Calls
Call 1
Inputs
#<alt (+.f64 (*.f64 x x) (*.f64 x x))>
#<alt (sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))>
#<alt (*.f64 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)))
1.0ms
x
@0
(+ (* x x) (* x x))
0.0ms
x
@inf
(+ (* x x) (* x x))
0.0ms
x
@-inf
(+ (* x x) (* x x))

rewrite43.0ms (1.8%)

Memory
-25.4MiB live, 64.4MiB allocated
Algorithm
batch-egg-rewrite
Rules
66×lower-*.f32
64×lower-*.f64
42×lower-fma.f64
42×lower-fma.f32
34×lower-/.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0418
0714
12310
01609
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
3 → 33
Calls
Call 1
Inputs
(+.f64 (*.f64 x x) (*.f64 x x))
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
(*.f64 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)))

simplify8.0ms (0.3%)

Memory
12.4MiB live, 12.4MiB allocated
Algorithm
egg-herbie
Rules
38×lower-*.f64
38×lower-fma.f64
38×lower-fma.f32
38×lower-*.f32
36×lower-+.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.3%)

Memory
20.3MiB live, 20.3MiB allocated
Compiler

Compiled 702 to 94 computations (86.6% saved)

prune7.0ms (0.3%)

Memory
-22.1MiB live, 15.9MiB 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.4%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.2%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
53.7%
(sqrt.f64 (*.f64 (+.f64 x x) x))
Compiler

Compiled 24 to 15 computations (37.5% saved)

simplify5.0ms (0.2%)

Memory
8.8MiB live, 8.8MiB 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×lower-*.f32
16×lower-*.f64
10×*-commutative
lift-sqrt.f64
lower-sqrt.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01144
02241
12741
23041
03041
Stop Event
iter limit
saturated
iter limit
Calls
Call 1
Inputs
(sqrt.f64 (*.f64 (+.f64 x x) x))
(*.f64 (+.f64 x x) x)
(+.f64 x x)
x
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
x
(sqrt.f64 #s(literal 2 binary64))
#s(literal 2 binary64)
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(sqrt.f64 x)
x
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
(hypot.f64 x x)
x
Outputs
(sqrt.f64 (*.f64 (+.f64 x x) x))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(*.f64 (+.f64 x x) x)
(*.f64 x (+.f64 x x))
(+.f64 x x)
x
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
x
(sqrt.f64 #s(literal 2 binary64))
#s(literal 2 binary64)
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(sqrt.f64 x)
x
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
(hypot.f64 x x)
(sqrt.f64 (*.f64 x (+.f64 x x)))
x

localize42.0ms (1.8%)

Memory
14.7MiB live, 88.0MiB allocated
Localize:

Found 10 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(hypot.f64 x x)
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(sqrt.f64 x)
accuracy99.6%
(sqrt.f64 (+.f64 x x))
accuracy99.4%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
accuracy100.0%
(sqrt.f64 #s(literal 2 binary64))
accuracy99.2%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
accuracy100.0%
(+.f64 x x)
accuracy100.0%
(*.f64 (+.f64 x x) x)
accuracy53.7%
(sqrt.f64 (*.f64 (+.f64 x x) x))
Samples
29.0ms256×0valid
Compiler

Compiled 51 to 13 computations (74.5% saved)

Precisions
Click to see histograms. Total time spent on operations: 19.0ms
ival-hypot: 7.0ms (36.2% of total)
ival-sqrt: 6.0ms (31% of total)
ival-mult: 4.0ms (20.7% of total)
ival-add: 1.0ms (5.2% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series8.0ms (0.4%)

Memory
-32.3MiB live, 12.0MiB allocated
Counts
9 → 96
Calls
Call 1
Inputs
#<alt (sqrt.f64 (*.f64 (+.f64 x x) x))>
#<alt (*.f64 (+.f64 x x) x)>
#<alt (+.f64 x x)>
#<alt (*.f64 x (sqrt.f64 #s(literal 2 binary64)))>
#<alt (sqrt.f64 #s(literal 2 binary64))>
#<alt (*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))>
#<alt (sqrt.f64 x)>
#<alt (sqrt.f64 (+.f64 x x))>
#<alt (hypot.f64 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
@-inf
(sqrt x)
0.0ms
x
@inf
(+ x x)

rewrite33.0ms (1.4%)

Memory
20.2MiB live, 56.1MiB allocated
Algorithm
batch-egg-rewrite
Rules
98×lower-*.f32
92×lower-*.f64
68×lower-fma.f64
68×lower-fma.f32
58×lower-/.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01136
02230
15026
025526
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
9 → 126
Calls
Call 1
Inputs
(sqrt.f64 (*.f64 (+.f64 x x) x))
(*.f64 (+.f64 x x) x)
(+.f64 x x)
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 #s(literal 2 binary64))
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
(sqrt.f64 x)
(sqrt.f64 (+.f64 x x))
(hypot.f64 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 x (*.f64 x (*.f64 x x))) #s(literal 0 binary64)) (/.f64 (*.f64 x (*.f64 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 x)) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))
(/.f64 #s(literal 0 binary64) #s(literal 0 binary64))
(/.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (fma.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 (+.f64 x x))
(*.f64 x #s(literal 2 binary64))
(*.f64 (+.f64 x 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 (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 #s(literal 0 binary64) (/.f64 #s(literal 1 binary64) #s(literal 0 binary64)))
(*.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 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 x (*.f64 x (*.f64 x x))) #s(literal 0 binary64)) (/.f64 (*.f64 x (*.f64 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 x)) (fma.f64 (*.f64 x x) (*.f64 x x) #s(literal 0 binary64)))
(/.f64 #s(literal 0 binary64) #s(literal 0 binary64))
(/.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) (fma.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 (+.f64 x x))
(*.f64 x #s(literal 2 binary64))
(*.f64 (+.f64 x 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 (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 #s(literal 0 binary64) (/.f64 #s(literal 1 binary64) #s(literal 0 binary64)))
(*.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 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)))

simplify161.0ms (7%)

Memory
-3.9MiB live, 116.8MiB allocated
Algorithm
egg-herbie
Rules
1 478×associate-*r*
1 232×lower-*.f64
1 232×lower-fma.f64
1 232×lower-fma.f32
1 232×lower-*.f32
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))))

eval105.0ms (4.6%)

Memory
1.6MiB live, 38.7MiB allocated
Compiler

Compiled 2 297 to 231 computations (89.9% saved)

prune19.0ms (0.8%)

Memory
-10.0MiB live, 28.6MiB allocated
Pruning

7 alts after pruning (3 fresh and 4 done)

PrunedKeptTotal
New2573260
Fresh000
Picked044
Done000
Total2577264
Accuracy
100.0%
Counts
264 → 7
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.0%
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))
99.4%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.2%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
27.0%
(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.3%
(sqrt.f64 (+.f64 x x))
53.7%
(sqrt.f64 (*.f64 (+.f64 x x) x))
Compiler

Compiled 55 to 32 computations (41.8% saved)

simplify271.0ms (11.8%)

Memory
-0.3MiB live, 292.6MiB allocated
Algorithm
egg-herbie
Localize:

Found 10 expressions of interest:

NewMetricScoreProgram
cost-diff0
(sqrt.f64 #s(literal 2 binary64))
cost-diff0
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
cost-diff0
(sqrt.f64 x)
cost-diff1600
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))
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
4 972×lower-*.f32
4 964×lower-*.f64
4 598×lower-fma.f32
4 596×lower-fma.f64
1 550×lower-/.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01485
02678
14366
210660
332452
4142752
5307552
6360152
7473152
8653852
9710652
10755152
0805649
Stop Event
iter limit
node limit
iter limit
Calls
Call 1
Inputs
(sqrt.f64 (+.f64 x x))
(+.f64 x 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))))
(/.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 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
(fma.f64 x x #s(literal 0 binary64))
x
#s(literal 0 binary64)
(+.f64 x x)
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))
(sqrt.f64 x)
x
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 #s(literal 2 binary64))
#s(literal 2 binary64)
Outputs
(sqrt.f64 (+.f64 x x))
(+.f64 x 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))))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))
(*.f64 x (+.f64 x x))
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
(*.f64 x (*.f64 x (*.f64 x (+.f64 x x))))
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
(*.f64 x (*.f64 x (+.f64 x x)))
(fma.f64 x x #s(literal 0 binary64))
(*.f64 x x)
x
#s(literal 0 binary64)
(+.f64 x x)
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 x)
x
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 #s(literal 2 binary64))
#s(literal 2 binary64)

localize48.0ms (2.1%)

Memory
22.4MiB live, 95.7MiB allocated
Localize:

Found 10 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(sqrt.f64 x)
accuracy100.0%
(sqrt.f64 #s(literal 2 binary64))
accuracy99.4%
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))
accuracy99.4%
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
accuracy99.9%
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
accuracy99.9%
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
accuracy53.7%
(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))))
accuracy35.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)
accuracy99.6%
(sqrt.f64 (+.f64 x x))
Samples
30.0ms256×0valid
Compiler

Compiled 94 to 17 computations (81.9% saved)

Precisions
Click to see histograms. Total time spent on operations: 19.0ms
ival-mult: 8.0ms (42.1% of total)
ival-sqrt: 6.0ms (31.6% of total)
ival-div: 2.0ms (10.5% of total)
ival-add: 2.0ms (10.5% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series10.0ms (0.4%)

Memory
-30.6MiB live, 11.0MiB allocated
Counts
11 → 120
Calls
Call 1
Inputs
#<alt (sqrt.f64 (+.f64 x x))>
#<alt (+.f64 x x)>
#<alt (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))>
#<alt (fma.f64 x x #s(literal 0 binary64))>
#<alt (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))))>
#<alt (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)>
#<alt (*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))>
#<alt (sqrt.f64 x)>
#<alt (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))>
#<alt (sqrt.f64 #s(literal 2 binary64))>
#<alt (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 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 (* 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 (* (pow (sqrt -1) 2) (sqrt 2))))>
#<alt (* -1 (* x (* (pow (sqrt -1) 2) (sqrt 2))))>
#<alt (* -1 (* x (* (pow (sqrt -1) 2) (sqrt 2))))>
#<alt (* -1 (* x (* (pow (sqrt -1) 2) (sqrt 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)))>
#<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) (* (pow (sqrt -1) 2) (sqrt 2))))>
#<alt (* -1 (* (sqrt x) (* (pow (sqrt -1) 2) (sqrt 2))))>
#<alt (* -1 (* (sqrt x) (* (pow (sqrt -1) 2) (sqrt 2))))>
#<alt (* -1 (* (sqrt x) (* (pow (sqrt -1) 2) (sqrt 2))))>
#<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

30 calls:

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

rewrite39.0ms (1.7%)

Memory
30.0MiB live, 68.4MiB allocated
Algorithm
batch-egg-rewrite
Rules
110×lower-/.f64
110×lower-/.f32
94×lower-*.f64
94×lower-*.f32
58×lower-fma.f32
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01477
02639
18915
071115
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
11 → 36
Calls
Call 1
Inputs
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (fma.f64 x x #s(literal 0 binary64)))
(fma.f64 x x #s(literal 0 binary64))
(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))))
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))
(sqrt.f64 x)
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(sqrt.f64 #s(literal 2 binary64))
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
Outputs
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)
(+.f64 #s(literal 0 binary64) (*.f64 x x))
(+.f64 (*.f64 x x) #s(literal 0 binary64))
(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 (*.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)))) (*.f64 x (neg.f64 x)))
(/.f64 (-.f64 #s(literal 0 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) (*.f64 x (neg.f64 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 (*.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)
(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)))
#s(literal 0 binary64)
(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)))
#s(literal 0 binary64)

simplify162.0ms (7%)

Memory
-8.3MiB live, 142.7MiB allocated
Algorithm
egg-herbie
Rules
1 492×lower-*.f64
1 492×lower-*.f32
1 488×lower-fma.f64
1 488×lower-fma.f32
1 442×associate-*r*
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
031512
169512
2200512
3384512
4963512
51739512
62455512
72558512
82595512
92632512
102634512
112734512
122774512
132774512
142774512
153169512
163529512
173537512
03537512
Stop Event
iter limit
saturated
Counts
120 → 120
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))
(* 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 (* (pow (sqrt -1) 2) (sqrt 2))))
(* -1 (* x (* (pow (sqrt -1) 2) (sqrt 2))))
(* -1 (* x (* (pow (sqrt -1) 2) (sqrt 2))))
(* -1 (* x (* (pow (sqrt -1) 2) (sqrt 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)))
(* (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) (* (pow (sqrt -1) 2) (sqrt 2))))
(* -1 (* (sqrt x) (* (pow (sqrt -1) 2) (sqrt 2))))
(* -1 (* (sqrt x) (* (pow (sqrt -1) 2) (sqrt 2))))
(* -1 (* (sqrt x) (* (pow (sqrt -1) 2) (sqrt 2))))
(* 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))))
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (sqrt.f64 #s(literal -1 binary64)))))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 #s(literal -2 binary64)) (neg.f64 (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 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(* 2 (pow x 2))
(*.f64 x (*.f64 x #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)
(* 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)))
(* 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 (* (pow (sqrt -1) 2) (sqrt 2))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* x (* (pow (sqrt -1) 2) (sqrt 2))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* x (* (pow (sqrt -1) 2) (sqrt 2))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* x (* (pow (sqrt -1) 2) (sqrt 2))))
(*.f64 x (sqrt.f64 #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)
(* (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) (* (pow (sqrt -1) 2) (sqrt 2))))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* (sqrt x) (* (pow (sqrt -1) 2) (sqrt 2))))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* (sqrt x) (* (pow (sqrt -1) 2) (sqrt 2))))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* (sqrt x) (* (pow (sqrt -1) 2) (sqrt 2))))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))
(* 2 (pow x 3))
(*.f64 x (*.f64 x (*.f64 x #s(literal 2 binary64))))

eval19.0ms (0.8%)

Memory
14.7MiB live, 53.3MiB allocated
Compiler

Compiled 2 579 to 228 computations (91.2% saved)

prune11.0ms (0.5%)

Memory
-7.4MiB live, 31.3MiB allocated
Pruning

8 alts after pruning (2 fresh and 6 done)

PrunedKeptTotal
New2152217
Fresh000
Picked123
Done044
Total2168224
Accuracy
100.0%
Counts
224 → 8
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.0%
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))
99.4%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.2%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
27.0%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
7.3%
(sqrt.f64 (+.f64 x x))
53.7%
(sqrt.f64 (*.f64 (+.f64 x x) x))
3.4%
#s(literal 0 binary64)
Compiler

Compiled 56 to 35 computations (37.5% saved)

simplify291.0ms (12.6%)

Memory
-13.3MiB live, 431.5MiB 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×lower-*.f32
6 772×lower-*.f64
5 432×lower-fma.f32
5 430×lower-fma.f64
2 316×cube-prod
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0960
01655
13743
210333
328533
461633
5217333
6329933
7389533
8487433
9628833
10670833
11687433
12700433
13714133
14728733
0830030
Stop Event
iter limit
node limit
iter limit
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x))
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
(fma.f64 x x #s(literal 0 binary64))
x
#s(literal 0 binary64)
(+.f64 x x)
(*.f64 x x)
Outputs
#s(literal 0 binary64)
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
(sqrt.f64 (*.f64 x (+.f64 x x)))
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x))
(*.f64 x (+.f64 x x))
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
(*.f64 (+.f64 x x) (*.f64 x (*.f64 x x)))
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
(*.f64 x (*.f64 x (+.f64 x x)))
(fma.f64 x x #s(literal 0 binary64))
(*.f64 x x)
x
#s(literal 0 binary64)
(+.f64 x x)
(*.f64 x x)

localize39.0ms (1.7%)

Memory
3.8MiB live, 41.5MiB allocated
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
accuracy99.9%
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
accuracy99.9%
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
accuracy53.7%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
accuracy35.6%
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x))
Samples
27.0ms256×0valid
Compiler

Compiled 67 to 11 computations (83.6% saved)

Precisions
Click to see histograms. Total time spent on operations: 20.0ms
ival-mult: 14.0ms (69.9% of total)
ival-div: 2.0ms (10% of total)
ival-add: 2.0ms (10% of total)
ival-sqrt: 2.0ms (10% 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
1.5MiB live, 1.5MiB allocated
Counts
5 → 60
Calls
Call 1
Inputs
#<alt (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x))>
#<alt (fma.f64 x x #s(literal 0 binary64))>
#<alt (sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))>
#<alt (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)>
#<alt (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 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))

rewrite47.0ms (2%)

Memory
1.8MiB live, 41.5MiB allocated
Algorithm
batch-egg-rewrite
Rules
110×lower-/.f64
110×lower-/.f32
88×lower-*.f32
86×lower-*.f64
64×lower-fma.f32
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0951
01655
1717
07247
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
5 → 26
Calls
Call 1
Inputs
(/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x))
(fma.f64 x x #s(literal 0 binary64))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x) (*.f64 x x)))
(*.f64 (*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x)) x)
(*.f64 (fma.f64 x x #s(literal 0 binary64)) (+.f64 x x))
Outputs
#s(literal 0 binary64)
(+.f64 #s(literal 0 binary64) (*.f64 x x))
(+.f64 (*.f64 x x) #s(literal 0 binary64))
(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 (*.f64 (*.f64 x x) (*.f64 x (*.f64 x (*.f64 x x)))) #s(literal 0 binary64)) (*.f64 x (*.f64 x (*.f64 x x))))
(/.f64 (-.f64 #s(literal 0 binary64) (*.f64 x (*.f64 x (*.f64 x x)))) (neg.f64 (*.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)

simplify9.0ms (0.4%)

Memory
12.5MiB live, 12.5MiB allocated
Algorithm
egg-herbie
Rules
58×lower-*.f64
58×lower-*.f32
54×lower-fma.f64
54×lower-fma.f32
44×lower-+.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.3%)

Memory
13.8MiB live, 13.8MiB allocated
Compiler

Compiled 1 094 to 152 computations (86.1% saved)

prune13.0ms (0.6%)

Memory
-21.1MiB live, 16.3MiB allocated
Pruning

8 alts after pruning (1 fresh and 7 done)

PrunedKeptTotal
New85186
Fresh000
Picked112
Done066
Total86894
Accuracy
100.0%
Counts
94 → 8
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
99.0%
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))
99.4%
(*.f64 (sqrt.f64 x) (sqrt.f64 (+.f64 x x)))
99.2%
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
27.0%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 x x) (+.f64 x x)) x) (*.f64 x x)))
7.3%
(sqrt.f64 (+.f64 x x))
53.7%
(sqrt.f64 (*.f64 (+.f64 x x) x))
3.4%
#s(literal 0 binary64)
Compiler

Compiled 142 to 61 computations (57% saved)

regimes16.0ms (0.7%)

Memory
24.6MiB live, 24.6MiB allocated
Counts
11 → 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)))
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))
(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:

4.0ms
x
4.0ms
(sqrt.f64 (+.f64 (*.f64 x x) (*.f64 x x)))
4.0ms
(*.f64 x x)
4.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)

regimes25.0ms (1.1%)

Memory
-14.9MiB live, 23.1MiB 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)))
(*.f64 (sqrt.f64 x) (*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64))))
(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:

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

Compiled 23 to 10 computations (56.5% saved)

regimes9.0ms (0.4%)

Memory
16.0MiB live, 16.0MiB 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:

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

Compiled 23 to 10 computations (56.5% saved)

regimes28.0ms (1.2%)

Memory
-26.1MiB live, 12.0MiB 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:

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

Compiled 23 to 10 computations (56.5% saved)

regimes5.0ms (0.2%)

Memory
10.4MiB live, 10.4MiB 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:

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

Compiled 23 to 10 computations (56.5% saved)

simplify5.0ms (0.2%)

Memory
7.7MiB live, 7.7MiB 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)

soundness170.0ms (7.3%)

Memory
19.1MiB live, 168.3MiB allocated
Rules
110×lower-/.f64
110×lower-/.f32
98×lower-*.f32
94×lower-*.f64
94×lower-*.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01477
02639
18915
071115
01136
02230
15026
025526
0418
0714
12310
01609
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
iter limit
unsound
iter limit
iter limit
iter limit
iter limit
unsound
iter limit
Compiler

Compiled 63 to 37 computations (41.3% saved)

preprocess45.0ms (2%)

Memory
-11.6MiB live, 80.2MiB 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...