Migdal et al, Equation (64)

Time bar (total: 1.8s)

analyze0.0ms (0%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%99.9%0.1%0%0%0%0
100%99.9%0%0.1%0%0%0%1
Compiler

Compiled 23 to 13 computations (43.5% saved)

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

sample1.5s (80.9%)

Results
1.2s8256×256valid
Precisions
Click to see histograms. Total time spent on operations: 905.0ms
ival-cos: 446.0ms (49.3% of total)
ival-mult: 274.0ms (30.3% of total)
ival-sqrt: 73.0ms (8.1% of total)
ival-div: 58.0ms (6.4% of total)
ival-add: 44.0ms (4.9% of total)
const: 11.0ms (1.2% of total)
Bogosity

preprocess192.0ms (10.4%)

Algorithm
egg-herbie
Rules
1241×fma-define
680×times-frac
547×fma-neg
460×div-sub
356×associate-/r*
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
048606
1145562
2421562
31139562
42837562
55639562
66583562
77394562
87471562
97487562
Stop Event
node limit
Calls
Call 1
Inputs
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 (neg.f64 a1) (neg.f64 a1))) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 (neg.f64 a2) (neg.f64 a2))))
(+.f64 (*.f64 (/.f64 (cos.f64 (neg.f64 th)) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 (neg.f64 th)) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
(neg.f64 (+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 (neg.f64 a1) (neg.f64 a1))) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2))))
(neg.f64 (+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 (neg.f64 a2) (neg.f64 a2)))))
(neg.f64 (+.f64 (*.f64 (/.f64 (cos.f64 (neg.f64 th)) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 (neg.f64 th)) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2))))
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)))
(+.f64 (*.f64 (/.f64 (cos.f64 a1) (sqrt.f64 #s(literal 2 binary64))) (*.f64 th th)) (*.f64 (/.f64 (cos.f64 a1) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
(+.f64 (*.f64 (/.f64 (cos.f64 a2) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 a2) (sqrt.f64 #s(literal 2 binary64))) (*.f64 th th)))
Outputs
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 a1 a1) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (fma.f64 a1 a1 (*.f64 a2 a2)))
(*.f64 (cos.f64 th) (/.f64 (fma.f64 a2 a2 (*.f64 a1 a1)) (sqrt.f64 #s(literal 2 binary64))))
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 a1 a1) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (fma.f64 a1 a1 (*.f64 a2 a2)))
(*.f64 (cos.f64 th) (/.f64 (fma.f64 a2 a2 (*.f64 a1 a1)) (sqrt.f64 #s(literal 2 binary64))))
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 (neg.f64 a1) (neg.f64 a1))) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 a1 a1) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (fma.f64 a1 a1 (*.f64 a2 a2)))
(*.f64 (cos.f64 th) (/.f64 (fma.f64 a2 a2 (*.f64 a1 a1)) (sqrt.f64 #s(literal 2 binary64))))
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 (neg.f64 a2) (neg.f64 a2))))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 a1 a1) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (fma.f64 a1 a1 (*.f64 a2 a2)))
(*.f64 (cos.f64 th) (/.f64 (fma.f64 a2 a2 (*.f64 a1 a1)) (sqrt.f64 #s(literal 2 binary64))))
(+.f64 (*.f64 (/.f64 (cos.f64 (neg.f64 th)) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 (neg.f64 th)) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 a1 a1) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (fma.f64 a1 a1 (*.f64 a2 a2)))
(*.f64 (cos.f64 th) (/.f64 (fma.f64 a2 a2 (*.f64 a1 a1)) (sqrt.f64 #s(literal 2 binary64))))
(neg.f64 (+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 (neg.f64 a1) (neg.f64 a1))) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2))))
(neg.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 a1 a1) (*.f64 a2 a2))))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (neg.f64 (fma.f64 a1 a1 (*.f64 a2 a2))))
(*.f64 (fma.f64 a1 a1 (*.f64 a2 a2)) (/.f64 (cos.f64 th) (neg.f64 (sqrt.f64 #s(literal 2 binary64)))))
(*.f64 (cos.f64 th) (/.f64 (fma.f64 a2 a2 (*.f64 a1 a1)) (neg.f64 (sqrt.f64 #s(literal 2 binary64)))))
(neg.f64 (+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 (neg.f64 a2) (neg.f64 a2)))))
(neg.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 a1 a1) (*.f64 a2 a2))))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (neg.f64 (fma.f64 a1 a1 (*.f64 a2 a2))))
(*.f64 (fma.f64 a1 a1 (*.f64 a2 a2)) (/.f64 (cos.f64 th) (neg.f64 (sqrt.f64 #s(literal 2 binary64)))))
(*.f64 (cos.f64 th) (/.f64 (fma.f64 a2 a2 (*.f64 a1 a1)) (neg.f64 (sqrt.f64 #s(literal 2 binary64)))))
(neg.f64 (+.f64 (*.f64 (/.f64 (cos.f64 (neg.f64 th)) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 (neg.f64 th)) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2))))
(neg.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 a1 a1) (*.f64 a2 a2))))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (neg.f64 (fma.f64 a1 a1 (*.f64 a2 a2))))
(*.f64 (fma.f64 a1 a1 (*.f64 a2 a2)) (/.f64 (cos.f64 th) (neg.f64 (sqrt.f64 #s(literal 2 binary64)))))
(*.f64 (cos.f64 th) (/.f64 (fma.f64 a2 a2 (*.f64 a1 a1)) (neg.f64 (sqrt.f64 #s(literal 2 binary64)))))
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 a1 a1) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (fma.f64 a1 a1 (*.f64 a2 a2)))
(*.f64 (cos.f64 th) (/.f64 (fma.f64 a2 a2 (*.f64 a1 a1)) (sqrt.f64 #s(literal 2 binary64))))
(+.f64 (*.f64 (/.f64 (cos.f64 a1) (sqrt.f64 #s(literal 2 binary64))) (*.f64 th th)) (*.f64 (/.f64 (cos.f64 a1) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 a1) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 th th) (*.f64 a2 a2)))
(*.f64 (/.f64 (cos.f64 a1) (sqrt.f64 #s(literal 2 binary64))) (fma.f64 th th (*.f64 a2 a2)))
(*.f64 (cos.f64 a1) (/.f64 (fma.f64 th th (*.f64 a2 a2)) (sqrt.f64 #s(literal 2 binary64))))
(+.f64 (*.f64 (/.f64 (cos.f64 a2) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 a2) (sqrt.f64 #s(literal 2 binary64))) (*.f64 th th)))
(*.f64 (/.f64 (cos.f64 a2) (sqrt.f64 #s(literal 2 binary64))) (+.f64 (*.f64 a1 a1) (*.f64 th th)))
(*.f64 (/.f64 (cos.f64 a2) (sqrt.f64 #s(literal 2 binary64))) (fma.f64 a1 a1 (*.f64 th th)))
(*.f64 (cos.f64 a2) (/.f64 (fma.f64 th th (*.f64 a1 a1)) (sqrt.f64 #s(literal 2 binary64))))
(*.f64 (/.f64 (cos.f64 a2) (sqrt.f64 #s(literal 2 binary64))) (fma.f64 th th (*.f64 a1 a1)))
Symmetry

(abs a1)

(abs a2)

(abs th)

(sort a1 a2)

explain122.0ms (6.6%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
00-0-(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1))
00-0-a2
00-0-(cos.f64 th)
00-0-(*.f64 a2 a2)
00-0-(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
00-0-#s(literal 2 binary64)
00-0-(/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64)))
00-0-(*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2))
00-0-th
00-0-(sqrt.f64 #s(literal 2 binary64))
00-0-(*.f64 a1 a1)
00-0-a1
Results
81.0ms512×256valid
Compiler

Compiled 142 to 38 computations (73.2% saved)

Precisions
Click to see histograms. Total time spent on operations: 48.0ms
ival-mult: 17.0ms (35.6% of total)
ival-cos: 13.0ms (27.2% of total)
ival-div: 11.0ms (23% of total)
ival-sqrt: 4.0ms (8.4% of total)
ival-add: 2.0ms (4.2% of total)
const: 1.0ms (2.1% of total)

eval0.0ms (0%)

Compiler

Compiled 3 to 3 computations (0% saved)

prune1.0ms (0.1%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
99.7%
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
Compiler

Compiled 44 to 24 computations (45.5% saved)

simplify2.0ms (0.1%)

Algorithm
egg-herbie
Rules
*-commutative
+-commutative
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01977
12277
Stop Event
saturated
Calls
Call 1
Inputs
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))
Outputs
(+.f64 (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a1 a1)) (*.f64 (/.f64 (cos.f64 th) (sqrt.f64 #s(literal 2 binary64))) (*.f64 a2 a2)))

soundness0.0ms (0%)

Stop Event
fuel
Compiler

Compiled 22 to 12 computations (45.5% saved)

preprocess33.0ms (1.8%)

Remove

(sort a1 a2)

(abs th)

(abs a2)

(abs a1)

Compiler

Compiled 440 to 240 computations (45.5% saved)

end0.0ms (0%)

Profiling

Loading profile data...