


Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 37.5
Initial simplification3.9
rmApplied expm1-log1p-u3.9
rmApplied add-log-exp3.9
Final simplification3.9
herbie shell --seed 2018365 +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: 13.1s)Debug log
1 alts after pruning (1 fresh and 0 done)
Merged error: 3.7b
Found 3 expressions with local error:
| 3.0b | (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))) |
| 4.0ms | (* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R) |
| 4.0ms | (cos (/ (+ phi2 phi1) 2)) |
3 calls. Slowest were:
| 843.0ms | (* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R) |
| 96.0ms | (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) |
| 26.0ms | (cos (/ (+ phi2 phi1) 2)) |
21 calls. Slowest were:
| 316.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
| 207.0ms | (* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (cos (/ (+ phi2 phi1) 2)) (cos (/ (+ phi2 phi1) 2))) (cos (/ (+ phi2 phi1) 2)))) |
| 166.0ms | (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi2 phi1) 2))) |
13 alts after pruning (13 fresh and 0 done)
Merged error: 3.6b
Found 4 expressions with local error:
| 3.0b | (cos (/ (+ phi2 phi1) 2)) |
| 0.5b | (log1p (cos (/ (+ phi2 phi1) 2))) |
| 0.2b | (expm1 (log1p (cos (/ (+ phi2 phi1) 2)))) |
| 0.2b | (* (- lambda1 lambda2) (expm1 (log1p (cos (/ (+ phi2 phi1) 2))))) |
4 calls. Slowest were:
| 8.0ms | (* (- lambda1 lambda2) (expm1 (log1p (cos (/ (+ phi2 phi1) 2))))) |
| 4.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 1.0ms | (log1p (cos (/ (+ phi2 phi1) 2))) |
4 calls. Slowest were:
| 153.0ms | (* (- lambda1 lambda2) (expm1 (log1p (cos (/ (+ phi2 phi1) 2))))) |
| 70.0ms | (expm1 (log1p (cos (/ (+ phi2 phi1) 2)))) |
| 63.0ms | (log1p (cos (/ (+ phi2 phi1) 2))) |
| 29.0ms | (cos (/ (+ phi2 phi1) 2)) |
24 calls. Slowest were:
| 308.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
| 258.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
| 232.0ms | (- (log 2) (+ (* 1/8 (* phi1 phi2)) (* 1/16 (pow phi2 2)))) |
13 alts after pruning (13 fresh and 0 done)
Merged error: 3.6b
Found 4 expressions with local error:
| 3.0b | (cos (/ (+ phi2 phi1) 2)) |
| 0.5b | (log1p (cos (/ (+ phi2 phi1) 2))) |
| 0.4b | (log (exp (log1p (cos (/ (+ phi2 phi1) 2))))) |
| 0.2b | (exp (log1p (cos (/ (+ phi2 phi1) 2)))) |
4 calls. Slowest were:
| 2.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 2.0ms | (log (exp (log1p (cos (/ (+ phi2 phi1) 2))))) |
| 1.0ms | (exp (log1p (cos (/ (+ phi2 phi1) 2)))) |
4 calls. Slowest were:
| 59.0ms | (log1p (cos (/ (+ phi2 phi1) 2))) |
| 56.0ms | (exp (log1p (cos (/ (+ phi2 phi1) 2)))) |
| 44.0ms | (log (exp (log1p (cos (/ (+ phi2 phi1) 2))))) |
| 15.0ms | (cos (/ (+ phi2 phi1) 2)) |
24 calls. Slowest were:
| 286.0ms | (- 2 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
| 237.0ms | (- (log 2) (+ (* 1/8 (* phi1 phi2)) (* 1/16 (pow phi2 2)))) |
| 212.0ms | (- (log 2) (+ (* 1/8 (* phi1 phi2)) (* 1/16 (pow phi2 2)))) |
15 alts after pruning (14 fresh and 1 done)
Merged error: 3.5b
Found 4 expressions with local error:
| 3.0b | (cos (/ (+ phi2 phi1) 2)) |
| 3.0b | (cos (/ (+ phi2 phi1) 2)) |
| 3.0b | (cos (/ (+ phi2 phi1) 2)) |
| 0.5b | (log1p (cos (/ (+ phi2 phi1) 2))) |
4 calls. Slowest were:
| 3.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 3.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 3.0ms | (cos (/ (+ phi2 phi1) 2)) |
4 calls. Slowest were:
| 51.0ms | (log1p (cos (/ (+ phi2 phi1) 2))) |
| 24.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 23.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 22.0ms | (cos (/ (+ phi2 phi1) 2)) |
13 calls. Slowest were:
| 268.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
| 265.0ms | (- (log 2) (+ (* 1/8 (* phi1 phi2)) (* 1/16 (pow phi2 2)))) |
| 257.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
15 alts after pruning (14 fresh and 1 done)
Merged error: 3.5b
0% (0.2b remaining)
Error of 3.9b against oracle of 3.7b and baseline of 3.9b