sqrt B (should all be same)

Time bar (total: 2.2s)

start0.0ms (0%)

Memory
0.0MiB live, 0.0MiB allocated

analyze1.0ms (0%)

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

Compiled 8 to 7 computations (12.5% saved)

sample708.0ms (32.5%)

Memory
5.8MiB live, 709.1MiB allocated
Samples
398.0ms8 256×0valid
Precisions
Click to see histograms. Total time spent on operations: 243.0ms
ival-mult: 156.0ms (64.3% of total)
ival-sqrt: 70.0ms (28.8% of total)
ival-true: 6.0ms (2.5% of total)
exact: 5.0ms (2.1% of total)
ival-assert: 3.0ms (1.2% of total)
adjust: 2.0ms (0.8% of total)
Bogosity

explain76.0ms (3.5%)

Memory
9.0MiB live, 54.4MiB allocated
FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
1170-3(-6.811176043455985e-156)(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
00-0-#s(literal 2 binary64)
00-0-(*.f64 (*.f64 #s(literal 2 binary64) x) x)
00-0-(*.f64 #s(literal 2 binary64) x)
00-0-x
Explanations
Click to see full explanations table
OperatorSubexpressionExplanationCount
sqrt.f64(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))uflow-rescue620
(*.f64 (*.f64 #s(literal 2 binary64) x) x)underflow62
sqrt.f64(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))oflow-rescue520
(*.f64 (*.f64 #s(literal 2 binary64) x) x)overflow52
Confusion
Predicted +Predicted -
+1143
-0139
Precision
1.0
Recall
0.9743589743589743
Confusion?
Predicted +Predicted MaybePredicted -
+11403
-00139
Precision?
1.0
Recall?
0.9743589743589743
Freqs
test
numberfreq
0142
1114
Total Confusion?
Predicted +Predicted MaybePredicted -
+100
-000
Precision?
1.0
Recall?
1.0
Samples
45.0ms512×0valid
Compiler

Compiled 42 to 19 computations (54.8% saved)

Precisions
Click to see histograms. Total time spent on operations: 35.0ms
ival-sqrt: 27.0ms (77.8% of total)
ival-mult: 7.0ms (20.2% of total)
ival-true: 0.0ms (0% of total)
adjust: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

preprocess19.0ms (0.9%)

Memory
20.4MiB live, 20.4MiB allocated
Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0717
11813
24913
310213
414713
523513
625513
727513
056
086
1156
2236
3546
41206
51846
62206
72406
82606
02603
Stop Event
iter limit
saturated
iter limit
saturated
Calls
Call 1
Inputs
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
Outputs
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
(hypot.f64 x x)
Symmetry

(abs x)

Compiler

Compiled 6 to 5 computations (16.7% saved)

eval0.0ms (0%)

Memory
0.1MiB live, 0.1MiB allocated
Compiler

Compiled 0 to 1 computations (-∞% saved)

prune0.0ms (0%)

Memory
0.5MiB live, 0.5MiB allocated
Alt Table
Click to see full alt table
StatusAccuracyProgram
58.0%
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
Compiler

Compiled 6 to 5 computations (16.7% saved)

simplify7.0ms (0.3%)

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

Found 3 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 #s(literal 2 binary64) x)
cost-diff0
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
cost-diff3
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0516
0816
11516
22316
35416
412016
518416
622016
724016
826016
026013
Stop Event
iter limit
saturated
iter limit
Calls
Call 1
Inputs
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
(*.f64 #s(literal 2 binary64) x)
#s(literal 2 binary64)
x
Outputs
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
(hypot.f64 x x)
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
(*.f64 (*.f64 x #s(literal 2 binary64)) x)
(*.f64 #s(literal 2 binary64) x)
(*.f64 x #s(literal 2 binary64))
#s(literal 2 binary64)
x

localize25.0ms (1.1%)

Memory
-20.4MiB live, 22.8MiB allocated
Localize:

Found 3 expressions of interest:

NewMetricScoreProgram
accuracy0.0
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
accuracy0.0
(*.f64 #s(literal 2 binary64) x)
accuracy26.878034728062758
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
Samples
20.0ms256×0valid
Compiler

Compiled 18 to 7 computations (61.1% saved)

Precisions
Click to see histograms. Total time spent on operations: 5.0ms
ival-mult: 3.0ms (58.2% of total)
ival-sqrt: 2.0ms (38.8% of total)
ival-true: 0.0ms (0% of total)
adjust: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series4.0ms (0.2%)

Memory
6.1MiB live, 6.1MiB allocated
Counts
3 → 4
Calls
Call 1
Inputs
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
(*.f64 #s(literal 2 binary64) x)
Outputs
(* x (sqrt 2))
(* 2 (pow x 2))
(* 2 x)
(* -1 (* x (sqrt 2)))
Calls

3 calls:

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

simplify8.0ms (0.4%)

Memory
11.6MiB live, 11.6MiB allocated
Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0917
12117
24217
39017
422817
543917
650217
050217
Stop Event
iter limit
saturated
Counts
4 → 4
Calls
Call 1
Inputs
(* x (sqrt 2))
(* 2 (pow x 2))
(* 2 x)
(* -1 (* x (sqrt 2)))
Outputs
(* x (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(* 2 (pow x 2))
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
(* 2 x)
(*.f64 #s(literal 2 binary64) x)
(* -1 (* x (sqrt 2)))
(*.f64 (neg.f64 x) (sqrt.f64 #s(literal 2 binary64)))

rewrite84.0ms (3.8%)

Memory
-52.5MiB live, 30.4MiB allocated
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0514
0812
12012
25710
02809
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
3 → 109
Calls
Call 1
Inputs
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
(*.f64 #s(literal 2 binary64) x)
Outputs
(*.f64 (neg.f64 (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/4 binary64))) (neg.f64 (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/4 binary64))))
(*.f64 (fabs.f64 (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/4 binary64))) (fabs.f64 (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/4 binary64))))
(*.f64 (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/4 binary64)) (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/4 binary64)))
(*.f64 (fabs.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (hypot.f64 x x) (sqrt.f64 x))
(*.f64 (sqrt.f64 x) (hypot.f64 x x))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (fabs.f64 x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) (sqrt.f64 x))
(pow.f64 (exp.f64 (log.f64 (*.f64 x #s(literal 2 binary64)))) #s(literal 1/2 binary64))
(pow.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) (*.f64 x #s(literal 2 binary64))) #s(literal 1/4 binary64))
(pow.f64 (pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/4 binary64)) #s(literal 2 binary64))
(pow.f64 (*.f64 x #s(literal 2 binary64)) #s(literal 1/2 binary64))
(/.f64 (sqrt.f64 #s(literal 0 binary64)) (sqrt.f64 #s(literal 0 binary64)))
(/.f64 (sqrt.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))) (sqrt.f64 (fma.f64 x x #s(literal 0 binary64))))
(sqrt.f64 (*.f64 x #s(literal 2 binary64)))
(hypot.f64 (neg.f64 (neg.f64 x)) (neg.f64 (neg.f64 x)))
(hypot.f64 (neg.f64 (neg.f64 x)) (neg.f64 (fabs.f64 x)))
(hypot.f64 (neg.f64 (neg.f64 x)) (neg.f64 x))
(hypot.f64 (neg.f64 (neg.f64 x)) (fabs.f64 x))
(hypot.f64 (neg.f64 (neg.f64 x)) x)
(hypot.f64 (neg.f64 (fabs.f64 x)) (neg.f64 (neg.f64 x)))
(hypot.f64 (neg.f64 (fabs.f64 x)) (neg.f64 (fabs.f64 x)))
(hypot.f64 (neg.f64 (fabs.f64 x)) (neg.f64 x))
(hypot.f64 (neg.f64 (fabs.f64 x)) (fabs.f64 x))
(hypot.f64 (neg.f64 (fabs.f64 x)) x)
(hypot.f64 (neg.f64 x) (neg.f64 (neg.f64 x)))
(hypot.f64 (neg.f64 x) (neg.f64 (fabs.f64 x)))
(hypot.f64 (neg.f64 x) (neg.f64 x))
(hypot.f64 (neg.f64 x) (fabs.f64 x))
(hypot.f64 (neg.f64 x) x)
(hypot.f64 (fabs.f64 x) (neg.f64 (neg.f64 x)))
(hypot.f64 (fabs.f64 x) (neg.f64 (fabs.f64 x)))
(hypot.f64 (fabs.f64 x) (neg.f64 x))
(hypot.f64 (fabs.f64 x) (fabs.f64 x))
(hypot.f64 (fabs.f64 x) x)
(hypot.f64 x (neg.f64 (neg.f64 x)))
(hypot.f64 x (neg.f64 (fabs.f64 x)))
(hypot.f64 x (neg.f64 x))
(hypot.f64 x (fabs.f64 x))
(hypot.f64 x x)
(exp.f64 (*.f64 (log.f64 (*.f64 x #s(literal 2 binary64))) #s(literal 1/2 binary64)))
(+.f64 (cosh.f64 (*.f64 (log.f64 (*.f64 x #s(literal 2 binary64))) #s(literal 1/2 binary64))) (sinh.f64 (*.f64 (log.f64 (*.f64 x #s(literal 2 binary64))) #s(literal 1/2 binary64))))
(*.f64 (*.f64 #s(literal 2 binary64) (neg.f64 x)) (neg.f64 x))
(*.f64 (*.f64 #s(literal 2 binary64) (fabs.f64 x)) (fabs.f64 x))
(*.f64 (neg.f64 x) (*.f64 (neg.f64 x) #s(literal 2 binary64)))
(*.f64 (neg.f64 x) (+.f64 (neg.f64 x) (neg.f64 x)))
(*.f64 (fabs.f64 x) (*.f64 (fabs.f64 x) #s(literal 2 binary64)))
(*.f64 (fabs.f64 x) (+.f64 (fabs.f64 x) (fabs.f64 x)))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 (*.f64 x #s(literal 2 binary64)) x)
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(*.f64 x #s(literal 2 binary64))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(*.f64 #s(literal 2 binary64) x)
(/.f64 (*.f64 #s(literal 0 binary64) x) #s(literal 0 binary64))
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 x (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (-.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))) #s(literal 0 binary64))
(/.f64 (+.f64 (pow.f64 (*.f64 x x) #s(literal 3 binary64)) (pow.f64 (*.f64 x x) #s(literal 3 binary64))) (fma.f64 (*.f64 x x) (*.f64 x x) (-.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))))
(/.f64 (neg.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))) (neg.f64 (fma.f64 x x #s(literal 0 binary64))))
(/.f64 #s(literal 0 binary64) #s(literal 0 binary64))
(/.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) (fma.f64 x x #s(literal 0 binary64)))
(fma.f64 (neg.f64 (neg.f64 x)) (neg.f64 (neg.f64 x)) (*.f64 x x))
(fma.f64 (neg.f64 (fabs.f64 x)) (neg.f64 (fabs.f64 x)) (*.f64 x x))
(fma.f64 (neg.f64 x) (neg.f64 x) (*.f64 x x))
(fma.f64 (fabs.f64 x) (fabs.f64 x) (*.f64 x x))
(fma.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 x x) (*.f64 x (neg.f64 x)))
(-.f64 (*.f64 x x) (*.f64 (neg.f64 (neg.f64 x)) (neg.f64 x)))
(-.f64 (*.f64 x x) (*.f64 (neg.f64 (fabs.f64 x)) (fabs.f64 x)))
(-.f64 (*.f64 x x) (*.f64 (neg.f64 x) x))
(+.f64 (/.f64 (pow.f64 x #s(literal 3 binary64)) (fma.f64 x x #s(literal 0 binary64))) (/.f64 (pow.f64 x #s(literal 3 binary64)) (fma.f64 x x #s(literal 0 binary64))))
(+.f64 (*.f64 x x) (*.f64 x x))
(+.f64 x x)
(*.f64 (*.f64 #s(literal 2 binary64) (neg.f64 x)) (neg.f64 x))
(*.f64 (*.f64 #s(literal 2 binary64) (fabs.f64 x)) (fabs.f64 x))
(*.f64 (neg.f64 x) (*.f64 (neg.f64 x) #s(literal 2 binary64)))
(*.f64 (neg.f64 x) (+.f64 (neg.f64 x) (neg.f64 x)))
(*.f64 (fabs.f64 x) (*.f64 (fabs.f64 x) #s(literal 2 binary64)))
(*.f64 (fabs.f64 x) (+.f64 (fabs.f64 x) (fabs.f64 x)))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 (*.f64 x #s(literal 2 binary64)) x)
(*.f64 x (*.f64 x #s(literal 2 binary64)))
(*.f64 x #s(literal 2 binary64))
(*.f64 #s(literal 2 binary64) (*.f64 x x))
(*.f64 #s(literal 2 binary64) x)
(/.f64 (*.f64 #s(literal 0 binary64) x) #s(literal 0 binary64))
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (*.f64 x (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))) (fma.f64 x x #s(literal 0 binary64)))
(/.f64 (-.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x))) #s(literal 0 binary64))
(/.f64 (+.f64 (pow.f64 (*.f64 x x) #s(literal 3 binary64)) (pow.f64 (*.f64 x x) #s(literal 3 binary64))) (fma.f64 (*.f64 x x) (*.f64 x x) (-.f64 (*.f64 (*.f64 x x) (*.f64 x x)) (*.f64 (*.f64 x x) (*.f64 x x)))))
(/.f64 (neg.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))) (neg.f64 (fma.f64 x x #s(literal 0 binary64))))
(/.f64 #s(literal 0 binary64) #s(literal 0 binary64))
(/.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) (fma.f64 x x #s(literal 0 binary64)))
(fma.f64 (neg.f64 (neg.f64 x)) (neg.f64 (neg.f64 x)) (*.f64 x x))
(fma.f64 (neg.f64 (fabs.f64 x)) (neg.f64 (fabs.f64 x)) (*.f64 x x))
(fma.f64 (neg.f64 x) (neg.f64 x) (*.f64 x x))
(fma.f64 (fabs.f64 x) (fabs.f64 x) (*.f64 x x))
(fma.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 x x) (*.f64 x (neg.f64 x)))
(-.f64 (*.f64 x x) (*.f64 (neg.f64 (neg.f64 x)) (neg.f64 x)))
(-.f64 (*.f64 x x) (*.f64 (neg.f64 (fabs.f64 x)) (fabs.f64 x)))
(-.f64 (*.f64 x x) (*.f64 (neg.f64 x) x))
(+.f64 (/.f64 (pow.f64 x #s(literal 3 binary64)) (fma.f64 x x #s(literal 0 binary64))) (/.f64 (pow.f64 x #s(literal 3 binary64)) (fma.f64 x x #s(literal 0 binary64))))
(+.f64 (*.f64 x x) (*.f64 x x))
(+.f64 x x)

eval15.0ms (0.7%)

Memory
22.7MiB live, 22.7MiB allocated
Compiler

Compiled 644 to 172 computations (73.3% saved)

prune5.0ms (0.2%)

Memory
11.2MiB live, 11.2MiB allocated
Pruning

5 alts after pruning (4 fresh and 1 done)

PrunedKeptTotal
New76480
Fresh000
Picked011
Done000
Total76581
Accuracy
100.0%
Counts
81 → 5
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
31.1%
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64))))
7.2%
(sqrt.f64 (+.f64 x x))
58.0%
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
99.3%
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
Compiler

Compiled 37 to 29 computations (21.6% saved)

simplify341.0ms (15.7%)

Memory
24.6MiB live, 335.5MiB allocated
Algorithm
egg-herbie
Localize:

Found 10 expressions of interest:

NewMetricScoreProgram
cost-diff0
(hypot.f64 x x)
cost-diff1
(fma.f64 x x #s(literal 0 binary64))
cost-diff2
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
cost-diff3
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64))))
cost-diff4
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64)))
cost-diff0
(+.f64 x x)
cost-diff0
(sqrt.f64 (+.f64 x x))
cost-diff0
(sqrt.f64 #s(literal 2 binary64))
cost-diff0
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
cost-diff0
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
Iterations

Useful iterations: 3 (0.0ms)

IterNodesCost
01979
03282
15774
217468
384856
4617656
0832656
Stop Event
iter limit
node limit
iter limit
Calls
Call 1
Inputs
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(sqrt.f64 #s(literal 2 binary64))
#s(literal 2 binary64)
x
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
x
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64))))
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64)))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
#s(literal 2 binary64)
(pow.f64 x #s(literal 3 binary64))
x
#s(literal 3 binary64)
(fma.f64 x x #s(literal 0 binary64))
#s(literal 0 binary64)
(hypot.f64 x x)
x
Outputs
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(sqrt.f64 #s(literal 2 binary64))
#s(literal 2 binary64)
x
(sqrt.f64 (+.f64 x x))
(sqrt.f64 (*.f64 x #s(literal 2 binary64)))
(+.f64 x x)
(*.f64 x #s(literal 2 binary64))
x
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64))))
(hypot.f64 x x)
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64)))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
(*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64))
#s(literal 2 binary64)
(pow.f64 x #s(literal 3 binary64))
x
#s(literal 3 binary64)
(fma.f64 x x #s(literal 0 binary64))
(*.f64 x x)
#s(literal 0 binary64)
(hypot.f64 x x)
x

localize60.0ms (2.8%)

Memory
-44.8MiB live, 66.6MiB allocated
Localize:

Found 10 expressions of interest:

NewMetricScoreProgram
accuracy0.0234375
(hypot.f64 x x)
accuracy0.0078125
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
accuracy0.08984375
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
accuracy26.878034728062758
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64))))
accuracy40.27203352341101
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64)))
accuracy0.0
(+.f64 x x)
accuracy0.0
(sqrt.f64 (+.f64 x x))
accuracy0.0
(sqrt.f64 #s(literal 2 binary64))
accuracy0.0
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
accuracy0.41796875
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
Samples
47.0ms256×0valid
Compiler

Compiled 84 to 21 computations (75% saved)

Precisions
Click to see histograms. Total time spent on operations: 37.0ms
ival-pow: 14.0ms (38.1% of total)
ival-mult: 9.0ms (24.5% of total)
ival-sqrt: 6.0ms (16.3% of total)
ival-hypot: 4.0ms (10.9% of total)
ival-add: 2.0ms (5.4% of total)
ival-div: 1.0ms (2.7% of total)
adjust: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)
ival-true: 0.0ms (0% of total)
exact: 0.0ms (0% of total)

series8.0ms (0.4%)

Memory
12.7MiB live, 12.7MiB allocated
Counts
11 → 9
Calls
Call 1
Inputs
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(sqrt.f64 #s(literal 2 binary64))
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64))))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
(fma.f64 x x #s(literal 0 binary64))
(hypot.f64 x x)
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
Outputs
(* x (sqrt 2))
(* (sqrt x) (sqrt 2))
(* 2 x)
(* 2 (pow x 2))
(* 2 (pow x 4))
(pow x 2)
(* 2 (pow x 3))
(* -1 (* x (sqrt 2)))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
Calls

3 calls:

TimeVariablePointExpression
3.0ms
x
@-inf
((sqrt (* (* 2 x) x)) (* (sqrt 2) x) (sqrt 2) (sqrt (+ x x)) (+ x x) (/ (* (* 2 (pow x 3)) x) (+ (* x x) 0)) (sqrt (/ (* (* 2 (pow x 3)) x) (+ (* x x) 0))) (* (* 2 (pow x 3)) x) (+ (* x x) 0) (sqrt (+ (* x x) (* x x))) (* 2 (pow x 3)))
2.0ms
x
@inf
((sqrt (* (* 2 x) x)) (* (sqrt 2) x) (sqrt 2) (sqrt (+ x x)) (+ x x) (/ (* (* 2 (pow x 3)) x) (+ (* x x) 0)) (sqrt (/ (* (* 2 (pow x 3)) x) (+ (* x x) 0))) (* (* 2 (pow x 3)) x) (+ (* x x) 0) (sqrt (+ (* x x) (* x x))) (* 2 (pow x 3)))
2.0ms
x
@0
((sqrt (* (* 2 x) x)) (* (sqrt 2) x) (sqrt 2) (sqrt (+ x x)) (+ x x) (/ (* (* 2 (pow x 3)) x) (+ (* x x) 0)) (sqrt (/ (* (* 2 (pow x 3)) x) (+ (* x x) 0))) (* (* 2 (pow x 3)) x) (+ (* x x) 0) (sqrt (+ (* x x) (* x x))) (* 2 (pow x 3)))

simplify38.0ms (1.7%)

Memory
-18.4MiB live, 26.2MiB allocated
Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
02344
15044
211244
323844
451344
590644
698044
798644
899044
999344
1099844
11102144
12109244
13117844
0117844
Stop Event
iter limit
saturated
Counts
9 → 9
Calls
Call 1
Inputs
(* x (sqrt 2))
(* (sqrt x) (sqrt 2))
(* 2 x)
(* 2 (pow x 2))
(* 2 (pow x 4))
(pow x 2)
(* 2 (pow x 3))
(* -1 (* x (sqrt 2)))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
Outputs
(* x (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(* (sqrt x) (sqrt 2))
(*.f64 (sqrt.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* 2 x)
(*.f64 x #s(literal 2 binary64))
(* 2 (pow x 2))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(pow x 2)
(*.f64 x x)
(* 2 (pow x 3))
(*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64))
(* -1 (* x (sqrt 2)))
(*.f64 (neg.f64 x) (sqrt.f64 #s(literal 2 binary64)))
(* -1 (* (sqrt x) (* (sqrt -2) (sqrt -1))))
(*.f64 (neg.f64 (sqrt.f64 #s(literal -2 binary64))) (*.f64 (sqrt.f64 #s(literal -1 binary64)) (sqrt.f64 x)))

rewrite37.0ms (1.7%)

Memory
33.6MiB live, 33.6MiB allocated
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01968
03238
110622
082422
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
11 → 46
Calls
Call 1
Inputs
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(sqrt.f64 #s(literal 2 binary64))
(sqrt.f64 (+.f64 x x))
(+.f64 x x)
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64))))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
(fma.f64 x x #s(literal 0 binary64))
(hypot.f64 x x)
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
Outputs
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(*.f64 x (sqrt.f64 #s(literal 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)))
(pow.f64 #s(literal 2 binary64) #s(literal 1/2 binary64))
(sqrt.f64 #s(literal 2 binary64))
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)
#s(literal 0 binary64)
(*.f64 (neg.f64 (neg.f64 x)) (neg.f64 (neg.f64 x)))
(*.f64 (neg.f64 (fabs.f64 x)) (neg.f64 (fabs.f64 x)))
(*.f64 (neg.f64 x) (neg.f64 x))
(*.f64 (fabs.f64 x) (fabs.f64 x))
(*.f64 x x)
(pow.f64 (neg.f64 x) #s(literal 2 binary64))
(pow.f64 (fabs.f64 x) #s(literal 2 binary64))
(pow.f64 x #s(literal 2 binary64))
(/.f64 (-.f64 (pow.f64 x #s(literal 6 binary64)) #s(literal 0 binary64)) (pow.f64 x #s(literal 4 binary64)))
(/.f64 (neg.f64 (pow.f64 x #s(literal 4 binary64))) (*.f64 (neg.f64 x) x))
(/.f64 (neg.f64 (pow.f64 x #s(literal 6 binary64))) (neg.f64 (pow.f64 x #s(literal 4 binary64))))
(/.f64 (pow.f64 x #s(literal 6 binary64)) (pow.f64 x #s(literal 4 binary64)))
(/.f64 (pow.f64 x #s(literal 4 binary64)) (*.f64 x x))
(neg.f64 (*.f64 (neg.f64 x) x))
(fma.f64 (neg.f64 (neg.f64 x)) (neg.f64 (neg.f64 x)) (/.f64 #s(literal 0 binary64) (pow.f64 x #s(literal 4 binary64))))
(fma.f64 (neg.f64 (neg.f64 x)) (neg.f64 (neg.f64 x)) #s(literal 0 binary64))
(fma.f64 (neg.f64 (fabs.f64 x)) (neg.f64 (fabs.f64 x)) (/.f64 #s(literal 0 binary64) (pow.f64 x #s(literal 4 binary64))))
(fma.f64 (neg.f64 (fabs.f64 x)) (neg.f64 (fabs.f64 x)) #s(literal 0 binary64))
(fma.f64 (neg.f64 x) (neg.f64 x) (/.f64 #s(literal 0 binary64) (pow.f64 x #s(literal 4 binary64))))
(fma.f64 (neg.f64 x) (neg.f64 x) #s(literal 0 binary64))
(fma.f64 (fabs.f64 x) (fabs.f64 x) (/.f64 #s(literal 0 binary64) (pow.f64 x #s(literal 4 binary64))))
(fma.f64 (fabs.f64 x) (fabs.f64 x) #s(literal 0 binary64))
(fma.f64 x x (/.f64 #s(literal 0 binary64) (pow.f64 x #s(literal 4 binary64))))
(fma.f64 x x #s(literal 0 binary64))
(-.f64 (*.f64 x x) #s(literal 0 binary64))
(-.f64 #s(literal 0 binary64) (*.f64 (neg.f64 x) x))
(-.f64 #s(literal 0 binary64) (*.f64 x x))
(fabs.f64 (*.f64 x x))
(exp.f64 (*.f64 (log.f64 x) #s(literal 2 binary64)))
(+.f64 (*.f64 x x) (/.f64 #s(literal 0 binary64) (pow.f64 x #s(literal 4 binary64))))
(+.f64 (*.f64 x x) #s(literal 0 binary64))
(+.f64 #s(literal 0 binary64) (*.f64 x x))
#s(literal 0 binary64)
#s(literal 0 binary64)

eval5.0ms (0.2%)

Memory
6.0MiB live, 6.0MiB allocated
Compiler

Compiled 707 to 182 computations (74.3% saved)

prune16.0ms (0.7%)

Memory
-38.1MiB live, 7.6MiB allocated
Pruning

7 alts after pruning (3 fresh and 4 done)

PrunedKeptTotal
New45348
Fresh000
Picked134
Done011
Total46753
Accuracy
100.0%
Counts
53 → 7
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
31.1%
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x)))
7.2%
(sqrt.f64 (+.f64 x x))
58.0%
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
99.3%
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
99.1%
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x))
3.9%
#s(literal 0 binary64)
Compiler

Compiled 51 to 42 computations (17.6% saved)

simplify81.0ms (3.7%)

Memory
34.1MiB live, 81.3MiB allocated
Algorithm
egg-herbie
Localize:

Found 8 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
cost-diff2
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
cost-diff3
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x)))
cost-diff4
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x))
cost-diff0
(*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))
cost-diff0
(*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x)
cost-diff0
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x))
cost-diff3
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01980
02974
16165
217361
378057
4484357
0891151
Stop Event
iter limit
node limit
iter limit
Calls
Call 1
Inputs
#s(literal 0 binary64)
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x))
(*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x)
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
(*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))
(log.f64 #s(literal 2 binary64))
#s(literal 2 binary64)
#s(literal 1/2 binary64)
x
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x)))
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
#s(literal 2 binary64)
(pow.f64 x #s(literal 3 binary64))
x
#s(literal 3 binary64)
(*.f64 x x)
Outputs
#s(literal 0 binary64)
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x))
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x)
(*.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))
(*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))
(*.f64 #s(literal 1/2 binary64) (log.f64 #s(literal 2 binary64)))
(log.f64 #s(literal 2 binary64))
#s(literal 2 binary64)
#s(literal 1/2 binary64)
x
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x)))
(hypot.f64 x x)
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x))
(*.f64 (*.f64 x x) #s(literal 2 binary64))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
(*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64))
#s(literal 2 binary64)
(pow.f64 x #s(literal 3 binary64))
x
#s(literal 3 binary64)
(*.f64 x x)

localize57.0ms (2.6%)

Memory
-30.1MiB live, 59.1MiB allocated
Localize:

Found 8 expressions of interest:

NewMetricScoreProgram
accuracy0.0078125
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
accuracy0.08984375
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
accuracy26.878034728062758
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x)))
accuracy40.27203352341101
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x))
accuracy0.0
(log.f64 #s(literal 2 binary64))
accuracy0.0
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x))
accuracy0.41796875
(*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x)
accuracy1.0
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
Samples
35.0ms256×0valid
Compiler

Compiled 74 to 20 computations (73% saved)

Precisions
Click to see histograms. Total time spent on operations: 26.0ms
ival-mult: 10.0ms (38.6% of total)
ival-div: 4.0ms (15.5% of total)
ival-sqrt: 3.0ms (11.6% of total)
ival-pow: 3.0ms (11.6% of total)
ival-exp: 2.0ms (7.7% of total)
ival-log: 2.0ms (7.7% of total)
exact: 1.0ms (3.9% of total)
adjust: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)
ival-true: 0.0ms (0% of total)

series4.0ms (0.2%)

Memory
5.6MiB live, 5.6MiB allocated
Counts
9 → 5
Calls
Call 1
Inputs
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x))
(*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x)
(*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x))
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x)))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
(log.f64 #s(literal 2 binary64))
Outputs
(* x (sqrt 2))
(* 2 (pow x 2))
(* 2 (pow x 4))
(* 2 (pow x 3))
(* -1 (* x (sqrt 2)))
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@-inf
((exp (* (log 2) 1/2)) (sqrt (* (* 2 x) x)) (* (exp (* (log 2) 1/2)) x) (* (log 2) 1/2) (/ (* (* 2 (pow x 3)) x) (* x x)) (sqrt (/ (* (* 2 (pow x 3)) x) (* x x))) (* (* 2 (pow x 3)) x) (* 2 (pow x 3)) (log 2))
1.0ms
x
@inf
((exp (* (log 2) 1/2)) (sqrt (* (* 2 x) x)) (* (exp (* (log 2) 1/2)) x) (* (log 2) 1/2) (/ (* (* 2 (pow x 3)) x) (* x x)) (sqrt (/ (* (* 2 (pow x 3)) x) (* x x))) (* (* 2 (pow x 3)) x) (* 2 (pow x 3)) (log 2))
1.0ms
x
@0
((exp (* (log 2) 1/2)) (sqrt (* (* 2 x) x)) (* (exp (* (log 2) 1/2)) x) (* (log 2) 1/2) (/ (* (* 2 (pow x 3)) x) (* x x)) (sqrt (/ (* (* 2 (pow x 3)) x) (* x x))) (* (* 2 (pow x 3)) x) (* 2 (pow x 3)) (log 2))

simplify18.0ms (0.8%)

Memory
11.7MiB live, 11.7MiB allocated
Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01424
13024
26624
315124
442024
580124
689424
789824
889824
089824
Stop Event
iter limit
saturated
Counts
5 → 5
Calls
Call 1
Inputs
(* x (sqrt 2))
(* 2 (pow x 2))
(* 2 (pow x 4))
(* 2 (pow x 3))
(* -1 (* x (sqrt 2)))
Outputs
(* x (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(* 2 (pow x 2))
(*.f64 (*.f64 x #s(literal 2 binary64)) x)
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 3))
(*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64))
(* -1 (* x (sqrt 2)))
(*.f64 (neg.f64 x) (sqrt.f64 #s(literal 2 binary64)))

rewrite42.0ms (1.9%)

Memory
1.4MiB live, 44.9MiB allocated
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01867
02861
17949
034247
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
9 → 93
Calls
Call 1
Inputs
(exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64)))
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x))
(*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x)
(*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))
(/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x))
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x)))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x)
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
(log.f64 #s(literal 2 binary64))
Outputs
(*.f64 (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)) (pow.f64 #s(literal 2 binary64) #s(literal 1/4 binary64)))
(pow.f64 (exp.f64 #s(literal 1/2 binary64)) (log.f64 #s(literal 2 binary64)))
(pow.f64 #s(literal 2 binary64) #s(literal 1/2 binary64))
(/.f64 (-.f64 (*.f64 (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64))))) (*.f64 (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))))) (-.f64 (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64))))))
(/.f64 (+.f64 (pow.f64 (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) #s(literal 3 binary64)) (pow.f64 (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) #s(literal 3 binary64))) (fma.f64 (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) (-.f64 (*.f64 (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64))))) (*.f64 (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64))))))))
(sqrt.f64 #s(literal 2 binary64))
(exp.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64))))
(+.f64 (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))))
(+.f64 (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))))
#s(approx (sqrt (* (* 2 x) x)) (*.f64 x (sqrt.f64 #s(literal 2 binary64))))
(*.f64 x (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(fma.f64 (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) x (*.f64 (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) x))
(fma.f64 x (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) (*.f64 x (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64))))))
(+.f64 (*.f64 (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) x) (*.f64 (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64)))) x))
(+.f64 (*.f64 x (cosh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64))))) (*.f64 x (sinh.f64 (log.f64 (sqrt.f64 #s(literal 2 binary64))))))
(*.f64 #s(literal 1/2 binary64) (log.f64 #s(literal 2 binary64)))
(*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))
(log.f64 (sqrt.f64 #s(literal 2 binary64)))
(*.f64 (/.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) (neg.f64 x)) (/.f64 x (neg.f64 x)))
(*.f64 (/.f64 x (neg.f64 x)) (/.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) (neg.f64 x)))
(*.f64 (/.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) (fabs.f64 x)) (/.f64 x (fabs.f64 x)))
(*.f64 (/.f64 x (fabs.f64 x)) (/.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) (fabs.f64 x)))
(*.f64 (/.f64 #s(literal 2 binary64) (neg.f64 x)) (/.f64 (pow.f64 x #s(literal 4 binary64)) (neg.f64 x)))
(*.f64 (/.f64 #s(literal 2 binary64) (fabs.f64 x)) (/.f64 (pow.f64 x #s(literal 4 binary64)) (fabs.f64 x)))
(*.f64 (/.f64 #s(literal 2 binary64) x) (/.f64 (pow.f64 x #s(literal 4 binary64)) x))
(*.f64 (/.f64 #s(literal 1 binary64) x) (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)))
(*.f64 #s(literal 1 binary64) (/.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) x))
(*.f64 (/.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) x) #s(literal 1 binary64))
(*.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) (/.f64 #s(literal 1 binary64) x))
(*.f64 (pow.f64 x #s(literal 3 binary64)) (*.f64 #s(literal 2 binary64) (/.f64 #s(literal 1 binary64) x)))
(*.f64 x (/.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) (*.f64 x x)))
(*.f64 #s(literal 2 binary64) (/.f64 (pow.f64 x #s(literal 4 binary64)) (*.f64 x x)))
(*.f64 #s(literal 2 binary64) (*.f64 (pow.f64 x #s(literal 3 binary64)) (/.f64 #s(literal 1 binary64) x)))
(/.f64 (/.f64 (*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64)) (neg.f64 x)) (neg.f64 x))
(/.f64 (/.f64 (*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64)) (fabs.f64 x)) (fabs.f64 x))
(/.f64 (*.f64 (/.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) x) x) x)
(/.f64 (neg.f64 (*.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) #s(literal 1 binary64))) (neg.f64 x))
(/.f64 (neg.f64 (*.f64 #s(literal -2 binary64) (pow.f64 x #s(literal 4 binary64)))) (*.f64 x x))
(/.f64 (*.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) #s(literal 1 binary64)) x)
(/.f64 (*.f64 #s(literal -2 binary64) (pow.f64 x #s(literal 4 binary64))) (*.f64 (neg.f64 x) x))
(/.f64 (*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64)) (*.f64 x x))
(neg.f64 (/.f64 (*.f64 #s(literal -2 binary64) (pow.f64 x #s(literal 4 binary64))) (*.f64 x x)))
(neg.f64 (/.f64 (*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64)) (*.f64 (neg.f64 x) x)))
(*.f64 (pow.f64 (*.f64 (/.f64 #s(literal 2 binary64) x) (/.f64 (pow.f64 x #s(literal 4 binary64)) x)) #s(literal 1/4 binary64)) (pow.f64 (*.f64 (/.f64 #s(literal 2 binary64) x) (/.f64 (pow.f64 x #s(literal 4 binary64)) x)) #s(literal 1/4 binary64)))
(*.f64 (sqrt.f64 (/.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) x)) #s(literal 1 binary64))
(*.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64))) (sqrt.f64 (/.f64 #s(literal 1 binary64) x)))
(*.f64 (pow.f64 (/.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) x) #s(literal 1/2 binary64)) (pow.f64 #s(literal 1 binary64) #s(literal 1/2 binary64)))
(*.f64 (pow.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) #s(literal 1/2 binary64)) (pow.f64 (/.f64 #s(literal 1 binary64) x) #s(literal 1/2 binary64)))
(pow.f64 (*.f64 (/.f64 #s(literal 2 binary64) x) (/.f64 (pow.f64 x #s(literal 4 binary64)) x)) #s(literal 1/2 binary64))
(/.f64 (neg.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64)))) (neg.f64 (fabs.f64 x)))
(/.f64 (sqrt.f64 (*.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) #s(literal 1 binary64))) (sqrt.f64 x))
(/.f64 (sqrt.f64 (*.f64 #s(literal -2 binary64) (pow.f64 x #s(literal 4 binary64)))) (sqrt.f64 (*.f64 (neg.f64 x) x)))
(/.f64 (sqrt.f64 (*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))) (fabs.f64 x))
(sqrt.f64 (*.f64 (/.f64 #s(literal 2 binary64) x) (/.f64 (pow.f64 x #s(literal 4 binary64)) x)))
(exp.f64 (*.f64 (log.f64 (*.f64 (/.f64 #s(literal 2 binary64) x) (/.f64 (pow.f64 x #s(literal 4 binary64)) x))) #s(literal 1/2 binary64)))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(*.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)) x)
(*.f64 (pow.f64 x #s(literal 3 binary64)) (*.f64 x #s(literal 2 binary64)))
(*.f64 (*.f64 x #s(literal 2 binary64)) (pow.f64 x #s(literal 3 binary64)))
(*.f64 x (*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64)))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 4 binary64)))
(fma.f64 (pow.f64 x #s(literal 3/2 binary64)) (*.f64 (pow.f64 x #s(literal 3/2 binary64)) x) (pow.f64 x #s(literal 4 binary64)))
(fma.f64 (*.f64 x x) (*.f64 x x) (pow.f64 x #s(literal 4 binary64)))
(fma.f64 (pow.f64 x #s(literal 3 binary64)) x (pow.f64 x #s(literal 4 binary64)))
(fma.f64 x (pow.f64 x #s(literal 3 binary64)) (pow.f64 x #s(literal 4 binary64)))
(+.f64 (pow.f64 x #s(literal 4 binary64)) (pow.f64 x #s(literal 4 binary64)))
(*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3/2 binary64))) (pow.f64 x #s(literal 3/2 binary64)))
(*.f64 (fma.f64 x x (-.f64 (*.f64 x x) (*.f64 x x))) (*.f64 x #s(literal 2 binary64)))
(*.f64 (pow.f64 x #s(literal 3/2 binary64)) (*.f64 (pow.f64 x #s(literal 3/2 binary64)) #s(literal 2 binary64)))
(*.f64 (pow.f64 x #s(literal 3/2 binary64)) (+.f64 (pow.f64 x #s(literal 3/2 binary64)) (pow.f64 x #s(literal 3/2 binary64))))
(*.f64 (*.f64 x x) (*.f64 x #s(literal 2 binary64)))
(*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64))
(*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x)
(*.f64 (*.f64 x #s(literal 2 binary64)) (*.f64 x x))
(*.f64 x (*.f64 (*.f64 x #s(literal 2 binary64)) x))
(*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64)))
(/.f64 (-.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) (pow.f64 x #s(literal 3 binary64))) (*.f64 (pow.f64 x #s(literal 3 binary64)) (pow.f64 x #s(literal 3 binary64)))) (-.f64 (pow.f64 x #s(literal 3 binary64)) (pow.f64 x #s(literal 3 binary64))))
(/.f64 (+.f64 (pow.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 3 binary64)) (pow.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 3 binary64))) (fma.f64 (pow.f64 x #s(literal 3 binary64)) (pow.f64 x #s(literal 3 binary64)) (-.f64 (*.f64 (pow.f64 x #s(literal 3 binary64)) (pow.f64 x #s(literal 3 binary64))) (*.f64 (pow.f64 x #s(literal 3 binary64)) (pow.f64 x #s(literal 3 binary64))))))
(fma.f64 (*.f64 x (fabs.f64 x)) (fabs.f64 x) (pow.f64 x #s(literal 3 binary64)))
(fma.f64 (neg.f64 (pow.f64 x #s(literal 3/2 binary64))) (neg.f64 (pow.f64 x #s(literal 3/2 binary64))) (pow.f64 x #s(literal 3 binary64)))
(fma.f64 (fabs.f64 (pow.f64 x #s(literal 3/2 binary64))) (fabs.f64 (pow.f64 x #s(literal 3/2 binary64))) (pow.f64 x #s(literal 3 binary64)))
(fma.f64 (pow.f64 x #s(literal 3/2 binary64)) (pow.f64 x #s(literal 3/2 binary64)) (pow.f64 x #s(literal 3 binary64)))
(fma.f64 (*.f64 (neg.f64 x) x) (neg.f64 x) (pow.f64 x #s(literal 3 binary64)))
(fma.f64 (neg.f64 x) (*.f64 (neg.f64 x) x) (pow.f64 x #s(literal 3 binary64)))
(fma.f64 (fabs.f64 x) (*.f64 (fabs.f64 x) x) (pow.f64 x #s(literal 3 binary64)))
(fma.f64 (*.f64 x x) x (pow.f64 x #s(literal 3 binary64)))
(fma.f64 x (*.f64 x x) (pow.f64 x #s(literal 3 binary64)))
(-.f64 (pow.f64 x #s(literal 3 binary64)) (*.f64 (neg.f64 (pow.f64 x #s(literal 3/2 binary64))) (pow.f64 x #s(literal 3/2 binary64))))
(-.f64 (pow.f64 x #s(literal 3 binary64)) (*.f64 (*.f64 (neg.f64 x) x) x))
(-.f64 (pow.f64 x #s(literal 3 binary64)) (*.f64 (neg.f64 x) (*.f64 x x)))
(+.f64 (pow.f64 x #s(literal 3 binary64)) (pow.f64 x #s(literal 3 binary64)))
(log.f64 #s(literal 2 binary64))

eval10.0ms (0.5%)

Memory
21.0MiB live, 21.0MiB allocated
Compiler

Compiled 1 446 to 354 computations (75.5% saved)

prune4.0ms (0.2%)

Memory
9.6MiB live, 9.6MiB allocated
Pruning

7 alts after pruning (1 fresh and 6 done)

PrunedKeptTotal
New97198
Fresh000
Picked123
Done044
Total987105
Accuracy
100.0%
Counts
105 → 7
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
31.1%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x)))
7.2%
(sqrt.f64 (+.f64 x x))
58.0%
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
99.3%
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
99.1%
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x))
3.9%
#s(literal 0 binary64)
Compiler

Compiled 53 to 42 computations (20.8% saved)

simplify156.0ms (7.1%)

Memory
-10.6MiB live, 138.1MiB allocated
Algorithm
egg-herbie
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
cost-diff2
(*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x)
cost-diff2
(*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x)
cost-diff3
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x)))
cost-diff4
(/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x))
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0956
01648
13644
211636
364234
4418734
5635634
0809731
Stop Event
iter limit
node limit
iter limit
Calls
Call 1
Inputs
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x)))
(/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x))
(*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x)
(*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x)
(*.f64 (*.f64 x #s(literal 2 binary64)) x)
(*.f64 x #s(literal 2 binary64))
x
#s(literal 2 binary64)
(*.f64 x x)
Outputs
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x)))
(hypot.f64 x x)
(/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x))
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
(*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x)
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x)
(*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64))
(*.f64 (*.f64 x #s(literal 2 binary64)) x)
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
(*.f64 x #s(literal 2 binary64))
(*.f64 #s(literal 2 binary64) x)
x
#s(literal 2 binary64)
(*.f64 x x)

localize27.0ms (1.2%)

Memory
-2.8MiB live, 42.1MiB allocated
Localize:

Found 4 expressions of interest:

NewMetricScoreProgram
accuracy0.08984375
(*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x)
accuracy0.09765625
(*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x)
accuracy26.878034728062758
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x)))
accuracy40.27203352341101
(/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x))
Samples
17.0ms256×0valid
Compiler

Compiled 58 to 11 computations (81% saved)

Precisions
Click to see histograms. Total time spent on operations: 11.0ms
ival-mult: 7.0ms (65.4% of total)
ival-sqrt: 2.0ms (18.7% of total)
ival-div: 1.0ms (9.3% of total)
ival-true: 0.0ms (0% of total)
adjust: 0.0ms (0% of total)
exact: 0.0ms (0% of total)
ival-assert: 0.0ms (0% of total)

series4.0ms (0.2%)

Memory
13.9MiB live, 13.9MiB allocated
Counts
4 → 5
Calls
Call 1
Inputs
(/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x)))
(*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x)
(*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x)
Outputs
(* 2 (pow x 2))
(* x (sqrt 2))
(* 2 (pow x 4))
(* 2 (pow x 3))
(* -1 (* x (sqrt 2)))
Calls

3 calls:

TimeVariablePointExpression
1.0ms
x
@-inf
((/ (* (* (* (* x 2) x) x) x) (* x x)) (sqrt (/ (* (* (* (* x 2) x) x) x) (* x x))) (* (* (* (* x 2) x) x) x) (* (* (* x 2) x) x))
1.0ms
x
@inf
((/ (* (* (* (* x 2) x) x) x) (* x x)) (sqrt (/ (* (* (* (* x 2) x) x) x) (* x x))) (* (* (* (* x 2) x) x) x) (* (* (* x 2) x) x))
1.0ms
x
@0
((/ (* (* (* (* x 2) x) x) x) (* x x)) (sqrt (/ (* (* (* (* x 2) x) x) x) (* x x))) (* (* (* (* x 2) x) x) x) (* (* (* x 2) x) x))

simplify38.0ms (1.7%)

Memory
-50.3MiB live, 48.8MiB allocated
Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01424
13024
26624
315124
442024
580124
688324
788524
888524
088524
Stop Event
iter limit
saturated
Counts
5 → 5
Calls
Call 1
Inputs
(* 2 (pow x 2))
(* x (sqrt 2))
(* 2 (pow x 4))
(* 2 (pow x 3))
(* -1 (* x (sqrt 2)))
Outputs
(* 2 (pow x 2))
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
(* x (sqrt 2))
(*.f64 (sqrt.f64 #s(literal 2 binary64)) x)
(* 2 (pow x 4))
(*.f64 (pow.f64 x #s(literal 4 binary64)) #s(literal 2 binary64))
(* 2 (pow x 3))
(*.f64 (pow.f64 x #s(literal 3 binary64)) #s(literal 2 binary64))
(* -1 (* x (sqrt 2)))
(*.f64 (neg.f64 x) (sqrt.f64 #s(literal 2 binary64)))

rewrite27.0ms (1.2%)

Memory
45.8MiB live, 45.8MiB allocated
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
0943
01643
14535
019835
Stop Event
iter limit
iter limit
iter limit
unsound
iter limit
Counts
4 → 53
Calls
Call 1
Inputs
(/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x)))
(*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x)
(*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x)
Outputs
(*.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (neg.f64 x)) (/.f64 (*.f64 x x) (neg.f64 x)))
(*.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (fabs.f64 x)) (/.f64 (*.f64 x x) (fabs.f64 x)))
(*.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) (/.f64 (*.f64 x x) x))
(*.f64 (/.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) (neg.f64 x)) (/.f64 x (neg.f64 x)))
(*.f64 (/.f64 x (neg.f64 x)) (/.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) (neg.f64 x)))
(*.f64 (/.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) (fabs.f64 x)) (/.f64 x (fabs.f64 x)))
(*.f64 (/.f64 x (fabs.f64 x)) (/.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) (fabs.f64 x)))
(*.f64 (/.f64 #s(literal 1 binary64) x) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x))
(*.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) #s(literal 1 binary64)))
(*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) #s(literal 1 binary64)) #s(literal 1 binary64))
(*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) (/.f64 #s(literal 1 binary64) x))
(*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (/.f64 (*.f64 x x) (*.f64 x x)))
(*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (*.f64 x (/.f64 #s(literal 1 binary64) x)))
(*.f64 (*.f64 #s(literal 2 binary64) x) (*.f64 (*.f64 x x) (/.f64 #s(literal 1 binary64) x)))
(*.f64 x (/.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) (*.f64 x x)))
(*.f64 x (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (/.f64 #s(literal 1 binary64) x)))
(/.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) x) (neg.f64 x)) (neg.f64 x))
(/.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) x) (fabs.f64 x)) (fabs.f64 x))
(/.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) #s(literal 1 binary64)) x) x)
(/.f64 (neg.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) #s(literal 1 binary64))) (neg.f64 x))
(/.f64 (neg.f64 (*.f64 (neg.f64 x) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x))) (*.f64 x x))
(/.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) #s(literal 1 binary64)) x)
(/.f64 (*.f64 (neg.f64 x) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x)) (*.f64 (neg.f64 x) x))
(/.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) x) (*.f64 x x))
(neg.f64 (/.f64 (*.f64 (neg.f64 x) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x)) (*.f64 x x)))
(neg.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) x) (*.f64 (neg.f64 x) x)))
(*.f64 (pow.f64 (*.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) #s(literal 1 binary64))) #s(literal 1/4 binary64)) (pow.f64 (*.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) #s(literal 1 binary64))) #s(literal 1/4 binary64)))
(*.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) #s(literal 1 binary64))) #s(literal 1 binary64))
(*.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x)) (sqrt.f64 (/.f64 #s(literal 1 binary64) x)))
(*.f64 (pow.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) #s(literal 1 binary64)) #s(literal 1/2 binary64)) (pow.f64 #s(literal 1 binary64) #s(literal 1/2 binary64)))
(*.f64 (pow.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) #s(literal 1/2 binary64)) (pow.f64 (/.f64 #s(literal 1 binary64) x) #s(literal 1/2 binary64)))
(pow.f64 (*.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) #s(literal 1 binary64))) #s(literal 1/2 binary64))
(/.f64 (neg.f64 (*.f64 (sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x)) (fabs.f64 x))) (neg.f64 (fabs.f64 x)))
(/.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) #s(literal 1 binary64))) (sqrt.f64 x))
(/.f64 (sqrt.f64 (*.f64 (neg.f64 x) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x))) (sqrt.f64 (*.f64 (neg.f64 x) x)))
(/.f64 (*.f64 (sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x)) (fabs.f64 x)) (fabs.f64 x))
(sqrt.f64 (*.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) #s(literal 1 binary64))))
(exp.f64 (*.f64 (log.f64 (*.f64 #s(literal 1 binary64) (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) #s(literal 1 binary64)))) #s(literal 1/2 binary64)))
(*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (neg.f64 x)) (neg.f64 x))
(*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (fabs.f64 x)) (fabs.f64 x))
(*.f64 (*.f64 x x) (*.f64 (*.f64 #s(literal 2 binary64) x) x))
(*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) x)
(*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (*.f64 x x))
(*.f64 (*.f64 #s(literal 2 binary64) x) (*.f64 (*.f64 x x) x))
(*.f64 (*.f64 #s(literal 2 binary64) x) (*.f64 x (*.f64 x x)))
(*.f64 x (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x))
(*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) (neg.f64 x)) (neg.f64 x))
(*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) (fabs.f64 x)) (fabs.f64 x))
(*.f64 (*.f64 x x) (*.f64 #s(literal 2 binary64) x))
(*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x)
(*.f64 (*.f64 #s(literal 2 binary64) x) (*.f64 x x))
(*.f64 #s(literal 2 binary64) (*.f64 x (*.f64 x x)))
(*.f64 x (*.f64 (*.f64 #s(literal 2 binary64) x) x))

eval13.0ms (0.6%)

Memory
-31.5MiB live, 15.4MiB allocated
Compiler

Compiled 847 to 199 computations (76.5% saved)

prune6.0ms (0.3%)

Memory
12.0MiB live, 12.0MiB allocated
Pruning

10 alts after pruning (3 fresh and 7 done)

PrunedKeptTotal
New55358
Fresh000
Picked011
Done066
Total551065
Accuracy
100.0%
Counts
65 → 10
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(hypot.f64 x x)
44.0%
(/.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) #s(literal 1 binary64))) (sqrt.f64 x))
44.0%
(*.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x)) (sqrt.f64 (/.f64 #s(literal 1 binary64) x)))
31.1%
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x)))
7.2%
(sqrt.f64 (+.f64 x x))
57.9%
(sqrt.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (*.f64 x (/.f64 #s(literal 1 binary64) x))))
58.0%
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
99.3%
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
99.1%
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x))
3.9%
#s(literal 0 binary64)
Compiler

Compiled 207 to 122 computations (41.1% saved)

regimes11.0ms (0.5%)

Memory
20.9MiB live, 20.9MiB allocated
Counts
12 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
(sqrt.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (*.f64 x (/.f64 #s(literal 1 binary64) x))))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x)))
(*.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x)) (sqrt.f64 (/.f64 #s(literal 1 binary64) x)))
(/.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) #s(literal 1 binary64))) (sqrt.f64 x))
(hypot.f64 x x)
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (*.f64 x x)))
(sqrt.f64 (/.f64 (*.f64 (*.f64 #s(literal 2 binary64) (pow.f64 x #s(literal 3 binary64))) x) (fma.f64 x x #s(literal 0 binary64))))
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (exp.f64 (*.f64 (log.f64 #s(literal 2 binary64)) #s(literal 1/2 binary64))) x))
Outputs
(hypot.f64 x x)
Calls

3 calls:

4.0ms
x
3.0ms
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
3.0ms
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
Results
AccuracySegmentsBranch
100.0%1(*.f64 (*.f64 #s(literal 2 binary64) x) x)
100.0%1(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
100.0%1x
Compiler

Compiled 12 to 10 computations (16.7% saved)

regimes10.0ms (0.4%)

Memory
-32.0MiB live, 13.7MiB allocated
Counts
8 → 1
Calls
Call 1
Inputs
#s(literal 0 binary64)
(sqrt.f64 (+.f64 x x))
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
(sqrt.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) (*.f64 x (/.f64 #s(literal 1 binary64) x))))
(sqrt.f64 (/.f64 (*.f64 (*.f64 (*.f64 (*.f64 x #s(literal 2 binary64)) x) x) x) (*.f64 x x)))
(*.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x)) (sqrt.f64 (/.f64 #s(literal 1 binary64) x)))
(/.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x) x) #s(literal 1 binary64))) (sqrt.f64 x))
Outputs
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
Calls

3 calls:

4.0ms
x
2.0ms
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
2.0ms
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
Results
AccuracySegmentsBranch
99.3%1(*.f64 (*.f64 #s(literal 2 binary64) x) x)
99.3%1(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
99.3%1x
Compiler

Compiled 12 to 10 computations (16.7% saved)

regimes4.0ms (0.2%)

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

3 calls:

1.0ms
x
1.0ms
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
1.0ms
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
Results
AccuracySegmentsBranch
7.2%1(*.f64 (*.f64 #s(literal 2 binary64) x) x)
7.2%1(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
7.2%1x
Compiler

Compiled 12 to 10 computations (16.7% saved)

regimes3.0ms (0.1%)

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

3 calls:

1.0ms
x
1.0ms
(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
1.0ms
(*.f64 (*.f64 #s(literal 2 binary64) x) x)
Results
AccuracySegmentsBranch
3.9%1x
3.9%1(*.f64 (*.f64 #s(literal 2 binary64) x) x)
3.9%1(sqrt.f64 (*.f64 (*.f64 #s(literal 2 binary64) x) x))
Compiler

Compiled 12 to 10 computations (16.7% saved)

simplify90.0ms (4.1%)

Memory
-26.3MiB live, 25.0MiB allocated
Algorithm
egg-herbie
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01219
11919
22619
36019
413719
522319
642119
7207419
8327219
Stop Event
node limit
Calls
Call 1
Inputs
(hypot.f64 x x)
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(sqrt.f64 (+.f64 x x))
#s(literal 0 binary64)
Outputs
(hypot.f64 x x)
#s(approx (sqrt (* (* 2 x) x)) (*.f64 (sqrt.f64 #s(literal 2 binary64)) x))
(sqrt.f64 (+.f64 x x))
#s(literal 0 binary64)

derivations85.0ms (3.9%)

Memory
21.9MiB live, 68.8MiB allocated
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0917
12117
24217
39017
422817
543917
650217
050217
0514
0812
12012
25710
02809
01968
03238
110622
082422
Stop Event
fuel
iter limit
iter limit
iter limit
unsound
iter limit
iter limit
iter limit
iter limit
unsound
iter limit
iter limit
saturated
Compiler

Compiled 19 to 13 computations (31.6% saved)

preprocess35.0ms (1.6%)

Memory
-4.7MiB live, 37.1MiB allocated
Remove

(abs x)

Compiler

Compiled 56 to 40 computations (28.6% saved)

end0.0ms (0%)

Memory
0.0MiB live, 0.0MiB allocated

Profiling

Loading profile data...