


Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) < 6.082425857210925e+304Initial program 1.9
if 6.082425857210925e+304 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 60.4
rmApplied add-cube-cbrt60.4
rmApplied add-cube-cbrt60.4
Taylor expanded around 0 46.3
Final simplification28.4
herbie shell --seed 2018362
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))
Time bar (total: 6.4m)Debug log
1 alts after pruning (1 fresh and 0 done)
Merged error: 40.8b
Found 4 expressions with local error:
| 39.3b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 2.6b | (cos (/ (+ phi1 phi2) 2)) |
| 2.6b | (cos (/ (+ phi1 phi2) 2)) |
| 0.2b | (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) |
4 calls. Slowest were:
| 20.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 5.0ms | (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) |
| 2.0ms | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 433.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 90.0ms | (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) |
| 21.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 17.0ms | (cos (/ (+ phi1 phi2) 2)) |
92 calls. Slowest were:
| 516.0ms | (sqrt (+ (* (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (* (+ phi1 phi2) (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))))) (* (* (+ lambda1 lambda2) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (* (- (* phi1 phi1) (* phi2 phi2)) (- (pow phi1 3) (pow phi2 3)))))) |
| 508.0ms | (sqrt (+ (* (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2)))) (+ phi1 phi2)) (* (* (+ lambda1 lambda2) (+ lambda1 lambda2)) (* (- phi1 phi2) (- (* phi1 phi1) (* phi2 phi2)))))) |
| 501.0ms | (sqrt (+ (* (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ phi1 phi2))) (* (* (+ lambda1 lambda2) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (* (- (pow phi1 3) (pow phi2 3)) (- (* phi1 phi1) (* phi2 phi2)))))) |
10 alts after pruning (9 fresh and 1 done)
Merged error: 29.1b
Found 4 expressions with local error:
| 39.3b | (sqrt (+ (* (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 2.6b | (cos (/ (+ phi1 phi2) 2)) |
| 2.6b | (cos (/ (+ phi1 phi2) 2)) |
| 2.6b | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 130.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 2.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 2.0ms | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 427.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 18.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 15.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 14.0ms | (cos (/ (+ phi1 phi2) 2)) |
82 calls. Slowest were:
| 738.0ms | (sqrt (+ (* (* (* (- (pow lambda1 3) (pow lambda2 3)) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (* (+ phi1 phi2) (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))))) (* (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (* (- (* phi1 phi1) (* phi2 phi2)) (- (pow phi1 3) (pow phi2 3)))))) |
| 623.0ms | (sqrt (+ (* (* (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (+ phi1 phi2)) (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (* (- (* phi1 phi1) (* phi2 phi2)) (- phi1 phi2))))) |
| 587.0ms | (sqrt (+ (* (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (* (+ phi1 phi2) (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))))) (* (* (+ lambda1 lambda2) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (* (- (* phi1 phi1) (* phi2 phi2)) (- (pow phi1 3) (pow phi2 3)))))) |
11 alts after pruning (10 fresh and 1 done)
Merged error: 28.6b
Found 4 expressions with local error:
| 39.3b | (sqrt (+ (* (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2)))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 2.6b | (cos (/ (+ phi1 phi2) 2)) |
| 2.6b | (cos (/ (+ phi1 phi2) 2)) |
| 2.6b | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 243.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2)))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 2.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 2.0ms | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 399.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2)))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 24.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 14.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 14.0ms | (cos (/ (+ phi1 phi2) 2)) |
82 calls. Slowest were:
| 792.0ms | (sqrt (+ (* (* (* (- lambda1 lambda2) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- (pow lambda1 3) (pow lambda2 3)) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2)))))) (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2)))) (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (* (- phi1 phi2) (- (pow phi1 3) (pow phi2 3)))))) |
| 760.0ms | (sqrt (+ (* (* (* (- (pow lambda1 3) (pow lambda2 3)) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2)))))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ phi1 phi2))) (* (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (+ lambda1 lambda2)) (* (- (pow phi1 3) (pow phi2 3)) (- (* phi1 phi1) (* phi2 phi2)))))) |
| 697.0ms | (sqrt (+ (* (* (* (- (pow lambda1 3) (pow lambda2 3)) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2))))) (* (- (pow lambda1 3) (pow lambda2 3)) (* (* (cbrt (cos (/ (+ phi1 phi2) 2))) (cbrt (cos (/ (+ phi1 phi2) 2)))) (cbrt (cos (/ (+ phi1 phi2) 2)))))) (+ phi1 phi2)) (* (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (* (- (* phi1 phi1) (* phi2 phi2)) (- phi1 phi2))))) |
11 alts after pruning (9 fresh and 2 done)
Merged error: 28.6b
Found 4 expressions with local error:
| 39.3b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (* (cbrt (- lambda1 lambda2)) (cbrt (- lambda1 lambda2))) (* (cbrt (- lambda1 lambda2)) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 2.6b | (cos (/ (+ phi1 phi2) 2)) |
| 2.6b | (cos (/ (+ phi1 phi2) 2)) |
| 0.6b | (cbrt (- lambda1 lambda2)) |
4 calls. Slowest were:
| 70.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (* (cbrt (- lambda1 lambda2)) (cbrt (- lambda1 lambda2))) (* (cbrt (- lambda1 lambda2)) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 2.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 2.0ms | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 400.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (* (cbrt (- lambda1 lambda2)) (cbrt (- lambda1 lambda2))) (* (cbrt (- lambda1 lambda2)) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 162.0ms | (cbrt (- lambda1 lambda2)) |
| 28.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 15.0ms | (cos (/ (+ phi1 phi2) 2)) |
663 calls. Slowest were:
| 1.1s | (sqrt (+ (* (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (* (cbrt (- (* lambda1 lambda1) (* lambda2 lambda2))) (cbrt (- (pow lambda1 3) (pow lambda2 3)))) (* (cbrt (- (* lambda1 lambda1) (* lambda2 lambda2))) (cos (/ (+ phi1 phi2) 2))))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ phi1 phi2))) (* (* (+ lambda1 lambda2) (* (* (cbrt (+ lambda1 lambda2)) (cbrt (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))))) (cbrt (+ lambda1 lambda2)))) (* (- (pow phi1 3) (pow phi2 3)) (- (* phi1 phi1) (* phi2 phi2)))))) |
| 1.0s | (sqrt (+ (* (* (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2))) (* (* (cbrt (- (* lambda1 lambda1) (* lambda2 lambda2))) (cbrt (- (pow lambda1 3) (pow lambda2 3)))) (* (cbrt (- (pow lambda1 3) (pow lambda2 3))) (cos (/ (+ phi1 phi2) 2))))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ phi1 phi2))) (* (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (* (* (cbrt (+ lambda1 lambda2)) (cbrt (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))))) (cbrt (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))))) (* (- (pow phi1 3) (pow phi2 3)) (- (* phi1 phi1) (* phi2 phi2)))))) |
| 1.0s | (sqrt (+ (* (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (* (cbrt (- (pow lambda1 3) (pow lambda2 3))) (cbrt (- (* lambda1 lambda1) (* lambda2 lambda2)))) (* (cbrt (- lambda1 lambda2)) (cos (/ (+ phi1 phi2) 2))))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ phi1 phi2))) (* (* (+ lambda1 lambda2) (* (cbrt (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (cbrt (+ lambda1 lambda2)))) (* (- (pow phi1 3) (pow phi2 3)) (- (* phi1 phi1) (* phi2 phi2)))))) |
12 alts after pruning (10 fresh and 2 done)
Merged error: 28.6b
65.9% (4.4b remaining)
Error of 28.4b against oracle of 24.1b and baseline of 36.8b