


Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 37.0
Simplified3.6
Taylor expanded around -inf 3.6
rmApplied distribute-rgt-in3.6
Applied cos-sum0.1
rmApplied add-log-exp0.1
Final simplification0.1
herbie shell --seed 2019004 +o rules:numerics
(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: 1.2m)Debug log
1 calls. Slowest were:
| 153.0ms | (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) |
1 alts after pruning (1 fresh and 0 done)
Merged error: 4.2b
Found 3 expressions with local error:
| 2.2b | (cos (/ (+ phi2 phi1) 2)) |
| 0.2b | (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) |
| 0.1b | (* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R) |
3 calls. Slowest were:
| 10.0ms | (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) |
| 5.0ms | (* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R) |
| 4.0ms | (cos (/ (+ phi2 phi1) 2)) |
3 calls. Slowest were:
| 455.0ms | (* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R) |
| 89.0ms | (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) |
| 26.0ms | (cos (/ (+ phi2 phi1) 2)) |
21 calls. Slowest were:
| 230.0ms | (* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (cos (/ (+ phi2 phi1) 2)) (cos (/ (+ phi2 phi1) 2))) (cos (/ (+ phi2 phi1) 2)))) |
| 213.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
| 187.0ms | (- (+ (* lambda2 (* (cos (* 1/2 (+ phi1 phi2))) R)) (+ (/ (* phi1 (* R phi2)) (* (cos (* 1/2 (+ phi1 phi2))) lambda1)) (/ (* phi1 (* lambda2 (* R phi2))) (* (cos (* 1/2 (+ phi1 phi2))) (pow lambda1 2)))))) |
13 alts after pruning (13 fresh and 0 done)
Merged error: 4.1b
Found 3 expressions with local error:
| 2.2b | (cos (* 1/2 (+ phi1 phi2))) |
| 0.2b | (* (- lambda1 lambda2) (cos (* 1/2 (+ phi1 phi2)))) |
| 0.1b | (* (hypot (* (- lambda1 lambda2) (cos (* 1/2 (+ phi1 phi2)))) (- phi1 phi2)) R) |
3 calls. Slowest were:
| 16.0ms | (* (- lambda1 lambda2) (cos (* 1/2 (+ phi1 phi2)))) |
| 6.0ms | (cos (* 1/2 (+ phi1 phi2))) |
| 5.0ms | (* (hypot (* (- lambda1 lambda2) (cos (* 1/2 (+ phi1 phi2)))) (- phi1 phi2)) R) |
3 calls. Slowest were:
| 527.0ms | (* (hypot (* (- lambda1 lambda2) (cos (* 1/2 (+ phi1 phi2)))) (- phi1 phi2)) R) |
| 92.0ms | (* (- lambda1 lambda2) (cos (* 1/2 (+ phi1 phi2)))) |
| 29.0ms | (cos (* 1/2 (+ phi1 phi2))) |
23 calls. Slowest were:
| 269.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi1 2)))) |
| 206.0ms | (* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (cos (* 1/2 (+ phi1 phi2))) (cos (* 1/2 (+ phi1 phi2)))) (cos (* 1/2 (+ phi1 phi2))))) |
| 196.0ms | (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (* 1/2 (+ phi1 phi2)))) |
7 alts after pruning (7 fresh and 0 done)
Merged error: 0.1b
Found 4 expressions with local error:
| 0.2b | (* (sin (* phi1 1/2)) (sin (* phi2 1/2))) |
| 0.2b | (* (- lambda1 lambda2) (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2))))) |
| 0.1b | (* (hypot (* (- lambda1 lambda2) (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2))))) (- phi1 phi2)) R) |
| 0.1b | (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2)))) |
4 calls. Slowest were:
| 45.0ms | (* (- lambda1 lambda2) (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2))))) |
| 27.0ms | (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2)))) |
| 7.0ms | (* (sin (* phi1 1/2)) (sin (* phi2 1/2))) |
4 calls. Slowest were:
| 17.8s | (* (hypot (* (- lambda1 lambda2) (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2))))) (- phi1 phi2)) R) |
| 307.0ms | (* (- lambda1 lambda2) (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2))))) |
| 104.0ms | (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2)))) |
| 80.0ms | (* (sin (* phi1 1/2)) (sin (* phi2 1/2))) |
65 calls. Slowest were:
| 697.0ms | (* (- lambda1 lambda2) (- (* (sin (* phi1 1/2)) (sin (* phi2 1/2))))) |
| 649.0ms | (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (- (+ (cos (+ (* phi1 1/2) (* phi2 1/2))) (cos (- (* phi1 1/2) (* phi2 1/2)))) (- (cos (- (* phi1 1/2) (* phi2 1/2))) (cos (+ (* phi1 1/2) (* phi2 1/2)))))) |
| 592.0ms | (* (fma (- (sin (* phi2 1/2))) (sin (* phi1 1/2)) (* (sin (* phi2 1/2)) (sin (* phi1 1/2)))) (- lambda1 lambda2)) |
10 alts after pruning (10 fresh and 0 done)
Merged error: 0.0b
Found 4 expressions with local error:
| 2.4b | (* (* (sin (* phi2 1/2)) (sin (* phi1 1/2))) (- lambda2 lambda1)) |
| 0.2b | (* (sin (* phi2 1/2)) (sin (* phi1 1/2))) |
| 0.2b | (* (- lambda1 lambda2) (* (cos (* phi1 1/2)) (cos (* phi2 1/2)))) |
| 0.1b | (* (hypot (+ (* (- lambda1 lambda2) (* (cos (* phi1 1/2)) (cos (* phi2 1/2)))) (* (* (sin (* phi2 1/2)) (sin (* phi1 1/2))) (- lambda2 lambda1))) (- phi1 phi2)) R) |
4 calls. Slowest were:
| 35.0ms | (* (* (sin (* phi2 1/2)) (sin (* phi1 1/2))) (- lambda2 lambda1)) |
| 29.0ms | (* (- lambda1 lambda2) (* (cos (* phi1 1/2)) (cos (* phi2 1/2)))) |
| 13.0ms | (* (sin (* phi2 1/2)) (sin (* phi1 1/2))) |
4 calls. Slowest were:
| 18.3s | (* (hypot (+ (* (- lambda1 lambda2) (* (cos (* phi1 1/2)) (cos (* phi2 1/2)))) (* (* (sin (* phi2 1/2)) (sin (* phi1 1/2))) (- lambda2 lambda1))) (- phi1 phi2)) R) |
| 205.0ms | (* (* (sin (* phi2 1/2)) (sin (* phi1 1/2))) (- lambda2 lambda1)) |
| 140.0ms | (* (- lambda1 lambda2) (* (cos (* phi1 1/2)) (cos (* phi2 1/2)))) |
| 50.0ms | (* (sin (* phi2 1/2)) (sin (* phi1 1/2))) |
59 calls. Slowest were:
| 565.0ms | (* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (* (cos (* phi1 1/2)) (cos (* phi1 1/2))) (cos (* phi1 1/2))) (* (* (cos (* phi2 1/2)) (cos (* phi2 1/2))) (cos (* phi2 1/2))))) |
| 546.0ms | (* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (cos (* phi1 1/2)) (cos (* phi2 1/2)))) (* (cos (* phi1 1/2)) (cos (* phi2 1/2))))) |
| 469.0ms | (* (- (cos (- (* phi2 1/2) (* phi1 1/2))) (cos (+ (* phi2 1/2) (* phi1 1/2)))) (- lambda2 lambda1)) |
10 alts after pruning (10 fresh and 0 done)
Merged error: 0.0b
0% (0.1b remaining)
Error of 0.1b against oracle of 0.0b and baseline of 0.1b