


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.7
Taylor expanded around -inf 3.7
rmApplied distribute-rgt-in3.7
Applied cos-sum0.1
Taylor expanded around -inf 0.1
Final simplification0.1
herbie shell --seed 2019007 +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: 42.9s)Debug log
1 calls. Slowest were:
| 175.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: 3.8b
Found 4 expressions with local error:
| 3.4b | (cos (/ (+ phi2 phi1) 2)) |
| 0.2b | (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) |
| 0.1b | (* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R) |
| 0.0b | (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) |
4 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)) |
4 calls. Slowest were:
| 479.0ms | (* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R) |
| 354.0ms | (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) |
| 93.0ms | (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) |
| 17.0ms | (cos (/ (+ phi2 phi1) 2)) |
24 calls. Slowest were:
| 295.0ms | (+ (/ (* lambda2 (* phi1 phi2)) (* (pow lambda1 2) (cos (* 1/2 (+ phi1 phi2))))) (+ (* lambda2 (cos (* 1/2 (+ phi1 phi2)))) (/ (* phi1 phi2) (* lambda1 (cos (* 1/2 (+ phi1 phi2))))))) |
| 241.0ms | (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi2 phi1) 2))) |
| 234.0ms | (* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (cos (/ (+ phi2 phi1) 2)) (cos (/ (+ phi2 phi1) 2))) (cos (/ (+ phi2 phi1) 2)))) |
11 alts after pruning (11 fresh and 0 done)
Merged error: 3.7b
Found 4 expressions with local error:
| 3.4b | (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) |
| 0.0b | (hypot (* (- lambda1 lambda2) (cos (* 1/2 (+ phi1 phi2)))) (- phi1 phi2)) |
4 calls. Slowest were:
| 17.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) |
4 calls. Slowest were:
| 558.0ms | (* (hypot (* (- lambda1 lambda2) (cos (* 1/2 (+ phi1 phi2)))) (- phi1 phi2)) R) |
| 322.0ms | (hypot (* (- lambda1 lambda2) (cos (* 1/2 (+ phi1 phi2)))) (- phi1 phi2)) |
| 111.0ms | (* (- lambda1 lambda2) (cos (* 1/2 (+ phi1 phi2)))) |
| 25.0ms | (cos (* 1/2 (+ phi1 phi2))) |
26 calls. Slowest were:
| 267.0ms | (* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (cos (* 1/2 (+ phi1 phi2))) (cos (* 1/2 (+ phi1 phi2)))) (cos (* 1/2 (+ phi1 phi2))))) |
| 246.0ms | (+ (/ (* lambda2 (* phi1 phi2)) (* (pow lambda1 2) (cos (* 1/2 (+ phi1 phi2))))) (+ (* lambda2 (cos (* 1/2 (+ phi1 phi2)))) (/ (* phi1 phi2) (* lambda1 (cos (* 1/2 (+ phi1 phi2))))))) |
| 216.0ms | (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (* 1/2 (+ phi1 phi2)))) |
6 alts after pruning (6 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 | (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2)))) |
| 0.1b | (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) |
4 calls. Slowest were:
| 86.0ms | (* (- lambda1 lambda2) (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2))))) |
| 29.0ms | (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2)))) |
| 9.0ms | (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) |
4 calls. Slowest were:
| 245.0ms | (* (- lambda1 lambda2) (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2))))) |
| 100.0ms | (- (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2)))) |
| 61.0ms | (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) |
| 61.0ms | (* (sin (* phi1 1/2)) (sin (* phi2 1/2))) |
72 calls. Slowest were:
| 693.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)))))) |
| 527.0ms | (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (+ (* (cos (* phi1 1/2)) (cos (* phi2 1/2))) (* (sin (* phi1 1/2)) (sin (* phi2 1/2))))) |
| 519.0ms | (* (- lambda1 lambda2) (fma (- (sin (* phi2 1/2))) (sin (* phi1 1/2)) (* (sin (* phi2 1/2)) (sin (* phi1 1/2))))) |
7 alts after pruning (7 fresh and 0 done)
Merged error: 0.0b
Found 4 expressions with local error:
| 0.2b | (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1))) |
| 0.2b | (* (- lambda1 lambda2) (- (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1))))) |
| 0.1b | (- (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1)))) |
| 0.1b | (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) |
4 calls. Slowest were:
| 65.0ms | (* (- lambda1 lambda2) (- (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1))))) |
| 25.0ms | (- (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1)))) |
| 14.0ms | (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) |
4 calls. Slowest were:
| 272.0ms | (* (- lambda1 lambda2) (- (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1))))) |
| 101.0ms | (- (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1)))) |
| 82.0ms | (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1))) |
| 53.0ms | (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) |
72 calls. Slowest were:
| 716.0ms | (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (- (+ (cos (+ (* 1/2 phi2) (* 1/2 phi1))) (cos (- (* 1/2 phi2) (* 1/2 phi1)))) (- (cos (- (* 1/2 phi2) (* 1/2 phi1))) (cos (+ (* 1/2 phi2) (* 1/2 phi1)))))) |
| 662.0ms | (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (+ (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1))))) |
| 652.0ms | (* (- (pow lambda1 3) (pow lambda2 3)) (- (* (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1))) (* (cos (* 1/2 phi2)) (cos (* 1/2 phi1)))) (* (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1))) (* (sin (* 1/2 phi2)) (sin (* 1/2 phi1)))))) |
7 alts after pruning (6 fresh and 1 done)
Merged error: 0.0b
0% (0.1b remaining)
Error of 0.1b against oracle of 0.1b and baseline of 0.1b