Equirectangular approximation to distance on a great circle

Time bar (total: 2.1s)

analyze0.0ms (0%)

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

Compiled 34 to 16 computations (52.9% saved)

sample1.6s (77.7%)

Memory
-102.0MiB live, 1 390.0MiB allocated
Samples
969.0ms6 539×0valid
361.0ms1 717×1valid
Precisions
Click to see histograms. Total time spent on operations: 993.0ms
ival-cos: 364.0ms (36.7% of total)
ival-hypot: 186.0ms (18.7% of total)
ival-mult: 130.0ms (13.1% of total)
ival-sub: 126.0ms (12.7% of total)
ival-div: 94.0ms (9.5% of total)
ival-add: 49.0ms (4.9% of total)
adjust: 28.0ms (2.8% of total)
exact: 6.0ms (0.6% of total)
ival-true: 6.0ms (0.6% of total)
ival-assert: 3.0ms (0.3% of total)
Bogosity

preprocess472.0ms (22.3%)

Memory
-3.9MiB live, 510.0MiB allocated
Algorithm
egg-herbie
Rules
15 840×accelerator-lowering-fma.f32
15 840×accelerator-lowering-fma.f64
2 462×*-lowering-*.f32
2 462×*-lowering-*.f64
2 156×unsub-neg
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0150693
1358693
2925677
34465677
47811677
01732
13232
27632
329032
4104932
5332832
6677132
0810016
Stop Event
iter limit
node limit
node limit
Calls
Call 1
Inputs
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
Outputs
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(*.f64 R (hypot.f64 (fma.f64 (-.f64 lambda1 lambda2) (cos.f64 (/.f64 (+.f64 phi1 phi2) #s(literal 2 binary64))) #s(literal 0 binary64)) (-.f64 phi1 phi2)))
Call 2
Inputs
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* (neg R) (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* R (sqrt (+ (* (* (- (neg lambda1) lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- (neg lambda1) lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* R (sqrt (+ (* (* (- lambda1 (neg lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 (neg lambda2)) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ (neg phi1) phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ (neg phi1) phi2) 2)))) (* (- (neg phi1) phi2) (- (neg phi1) phi2)))))
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 (neg phi2)) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 (neg phi2)) 2)))) (* (- phi1 (neg phi2)) (- phi1 (neg phi2))))))
(neg (* (neg R) (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))
(neg (* R (sqrt (+ (* (* (- (neg lambda1) lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- (neg lambda1) lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))
(neg (* R (sqrt (+ (* (* (- lambda1 (neg lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 (neg lambda2)) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))
(neg (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ (neg phi1) phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ (neg phi1) phi2) 2)))) (* (- (neg phi1) phi2) (- (neg phi1) phi2))))))
(neg (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 (neg phi2)) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 (neg phi2)) 2)))) (* (- phi1 (neg phi2)) (- phi1 (neg phi2)))))))
(* lambda1 (sqrt (+ (* (* (- R lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- R lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* lambda2 (sqrt (+ (* (* (- lambda1 R) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 R) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* phi1 (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ R phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ R phi2) 2)))) (* (- R phi2) (- R phi2)))))
(* phi2 (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 R) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 R) 2)))) (* (- phi1 R) (- phi1 R)))))
(* R (sqrt (+ (* (* (- lambda2 lambda1) (cos (/ (+ phi1 phi2) 2))) (* (- lambda2 lambda1) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* R (sqrt (+ (* (* (- phi1 lambda2) (cos (/ (+ lambda1 phi2) 2))) (* (- phi1 lambda2) (cos (/ (+ lambda1 phi2) 2)))) (* (- lambda1 phi2) (- lambda1 phi2)))))
(* R (sqrt (+ (* (* (- phi2 lambda2) (cos (/ (+ phi1 lambda1) 2))) (* (- phi2 lambda2) (cos (/ (+ phi1 lambda1) 2)))) (* (- phi1 lambda1) (- phi1 lambda1)))))
(* R (sqrt (+ (* (* (- lambda1 phi1) (cos (/ (+ lambda2 phi2) 2))) (* (- lambda1 phi1) (cos (/ (+ lambda2 phi2) 2)))) (* (- lambda2 phi2) (- lambda2 phi2)))))
(* R (sqrt (+ (* (* (- lambda1 phi2) (cos (/ (+ phi1 lambda2) 2))) (* (- lambda1 phi2) (cos (/ (+ phi1 lambda2) 2)))) (* (- phi1 lambda2) (- phi1 lambda2)))))
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2)))) (* (- phi2 phi1) (- phi2 phi1)))))
Outputs
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* R (sqrt (+ (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))))
(* (neg R) (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* (sqrt (+ (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))) (neg R))
(* R (sqrt (+ (* (* (- (neg lambda1) lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- (neg lambda1) lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* R (sqrt (+ (* (- phi1 phi2) (- phi1 phi2)) (* (cos (/ (+ phi1 phi2) 2)) (* (+ lambda1 lambda2) (* (cos (/ (+ phi1 phi2) 2)) (+ lambda1 lambda2)))))))
(* R (sqrt (+ (* (* (- lambda1 (neg lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 (neg lambda2)) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* R (sqrt (+ (* (- phi1 phi2) (- phi1 phi2)) (* (cos (/ (+ phi1 phi2) 2)) (* (+ lambda1 lambda2) (* (cos (/ (+ phi1 phi2) 2)) (+ lambda1 lambda2)))))))
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ (neg phi1) phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ (neg phi1) phi2) 2)))) (* (- (neg phi1) phi2) (- (neg phi1) phi2)))))
(* R (sqrt (+ (* (cos (/ (- phi2 phi1) 2)) (* (- lambda1 lambda2) (* (- lambda1 lambda2) (cos (/ (- phi2 phi1) 2))))) (* (+ phi1 phi2) (+ phi1 phi2)))))
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 (neg phi2)) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 (neg phi2)) 2)))) (* (- phi1 (neg phi2)) (- phi1 (neg phi2))))))
(* R (sqrt (+ (* (cos (/ (- phi2 phi1) 2)) (* (- lambda1 lambda2) (* (- lambda1 lambda2) (cos (/ (- phi2 phi1) 2))))) (* (+ phi1 phi2) (+ phi1 phi2)))))
(neg (* (neg R) (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))
(* R (sqrt (+ (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))))
(neg (* R (sqrt (+ (* (* (- (neg lambda1) lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- (neg lambda1) lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))
(* (neg R) (sqrt (+ (* (- phi1 phi2) (- phi1 phi2)) (* (cos (/ (+ phi1 phi2) 2)) (* (+ lambda1 lambda2) (* (cos (/ (+ phi1 phi2) 2)) (+ lambda1 lambda2)))))))
(neg (* R (sqrt (+ (* (* (- lambda1 (neg lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 (neg lambda2)) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))
(* (neg R) (sqrt (+ (* (- phi1 phi2) (- phi1 phi2)) (* (cos (/ (+ phi1 phi2) 2)) (* (+ lambda1 lambda2) (* (cos (/ (+ phi1 phi2) 2)) (+ lambda1 lambda2)))))))
(neg (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ (neg phi1) phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ (neg phi1) phi2) 2)))) (* (- (neg phi1) phi2) (- (neg phi1) phi2))))))
(* (neg R) (sqrt (+ (* (cos (/ (- phi2 phi1) 2)) (* (- lambda1 lambda2) (* (- lambda1 lambda2) (cos (/ (- phi2 phi1) 2))))) (* (+ phi1 phi2) (+ phi1 phi2)))))
(neg (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 (neg phi2)) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 (neg phi2)) 2)))) (* (- phi1 (neg phi2)) (- phi1 (neg phi2)))))))
(* (neg R) (sqrt (+ (* (cos (/ (- phi2 phi1) 2)) (* (- lambda1 lambda2) (* (- lambda1 lambda2) (cos (/ (- phi2 phi1) 2))))) (* (+ phi1 phi2) (+ phi1 phi2)))))
(* lambda1 (sqrt (+ (* (* (- R lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- R lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* lambda1 (sqrt (+ (* (- phi1 phi2) (- phi1 phi2)) (* (* (cos (/ (+ phi1 phi2) 2)) (- R lambda2)) (* (cos (/ (+ phi1 phi2) 2)) (- R lambda2))))))
(* lambda2 (sqrt (+ (* (* (- lambda1 R) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 R) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* lambda2 (sqrt (+ (* (- phi1 phi2) (- phi1 phi2)) (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 R) (* (cos (/ (+ phi1 phi2) 2)) (- lambda1 R)))))))
(* phi1 (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ R phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ R phi2) 2)))) (* (- R phi2) (- R phi2)))))
(* phi1 (sqrt (+ (* (cos (/ (+ R phi2) 2)) (* (cos (/ (+ R phi2) 2)) (* (- lambda1 lambda2) (- lambda1 lambda2)))) (* (- R phi2) (- R phi2)))))
(* phi2 (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 R) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 R) 2)))) (* (- phi1 R) (- phi1 R)))))
(* phi2 (sqrt (+ (* (cos (/ (+ R phi1) 2)) (* (cos (/ (+ R phi1) 2)) (* (- lambda1 lambda2) (- lambda1 lambda2)))) (* (- phi1 R) (- phi1 R)))))
(* R (sqrt (+ (* (* (- lambda2 lambda1) (cos (/ (+ phi1 phi2) 2))) (* (- lambda2 lambda1) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))
(* R (sqrt (+ (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))))
(* R (sqrt (+ (* (* (- phi1 lambda2) (cos (/ (+ lambda1 phi2) 2))) (* (- phi1 lambda2) (cos (/ (+ lambda1 phi2) 2)))) (* (- lambda1 phi2) (- lambda1 phi2)))))
(* R (sqrt (+ (* (cos (/ (+ lambda1 phi2) 2)) (* (- phi1 lambda2) (* (- phi1 lambda2) (cos (/ (+ lambda1 phi2) 2))))) (* (- lambda1 phi2) (- lambda1 phi2)))))
(* R (sqrt (+ (* (* (- phi2 lambda2) (cos (/ (+ phi1 lambda1) 2))) (* (- phi2 lambda2) (cos (/ (+ phi1 lambda1) 2)))) (* (- phi1 lambda1) (- phi1 lambda1)))))
(* R (sqrt (+ (* (cos (/ (+ lambda1 phi1) 2)) (* (cos (/ (+ lambda1 phi1) 2)) (* (- phi2 lambda2) (- phi2 lambda2)))) (* (- phi1 lambda1) (- phi1 lambda1)))))
(* R (sqrt (+ (* (* (- lambda1 phi1) (cos (/ (+ lambda2 phi2) 2))) (* (- lambda1 phi1) (cos (/ (+ lambda2 phi2) 2)))) (* (- lambda2 phi2) (- lambda2 phi2)))))
(* R (sqrt (+ (* (- lambda1 phi1) (* (cos (/ (+ lambda2 phi2) 2)) (* (- lambda1 phi1) (cos (/ (+ lambda2 phi2) 2))))) (* (- phi2 lambda2) (- phi2 lambda2)))))
(* R (sqrt (+ (* (* (- lambda1 phi2) (cos (/ (+ phi1 lambda2) 2))) (* (- lambda1 phi2) (cos (/ (+ phi1 lambda2) 2)))) (* (- phi1 lambda2) (- phi1 lambda2)))))
(* R (sqrt (+ (* (* (- lambda1 phi2) (- lambda1 phi2)) (* (cos (/ (+ lambda2 phi1) 2)) (cos (/ (+ lambda2 phi1) 2)))) (* (- phi1 lambda2) (- phi1 lambda2)))))
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2)))) (* (- phi2 phi1) (- phi2 phi1)))))
(* R (sqrt (+ (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))))
Symmetry

(negabs R)

(sort lambda1 lambda2)

(sort phi1 phi2)

explain0.0ms (0%)

Memory
0.7MiB live, 0.7MiB allocated
Compiler

Compiled 157 to 19 computations (87.9% saved)

end0.0ms (0%)

Memory
0.0MiB live, 0.0MiB allocated

Profiling

Loading profile data...