


Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 36.8
Initial simplification3.7
rmApplied add-log-exp3.8
rmApplied log1p-expm1-u3.8
rmApplied add-cbrt-cube3.8
Final simplification3.8
herbie shell --seed 2018362 +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: 15.5s)Debug log
1 alts after pruning (1 fresh and 0 done)
Merged error: 4.9b
Found 4 expressions with local error:
| 2.6b | (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:
| 455.0ms | (* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R) |
| 386.0ms | (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) |
| 89.0ms | (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) |
| 25.0ms | (cos (/ (+ phi2 phi1) 2)) |
24 calls. Slowest were:
| 355.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))))))) |
| 259.0ms | (* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (cos (/ (+ phi2 phi1) 2)) (cos (/ (+ phi2 phi1) 2))) (cos (/ (+ phi2 phi1) 2)))) |
| 250.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
13 alts after pruning (13 fresh and 0 done)
Merged error: 4.7b
Found 4 expressions with local error:
| 2.6b | (cos (/ (+ phi2 phi1) 2)) |
| 0.6b | (log (exp (cos (/ (+ phi2 phi1) 2)))) |
| 0.2b | (* (- lambda1 lambda2) (log (exp (cos (/ (+ phi2 phi1) 2))))) |
| 0.2b | (exp (cos (/ (+ phi2 phi1) 2))) |
4 calls. Slowest were:
| 11.0ms | (* (- lambda1 lambda2) (log (exp (cos (/ (+ phi2 phi1) 2))))) |
| 4.0ms | (log (exp (cos (/ (+ phi2 phi1) 2)))) |
| 3.0ms | (exp (cos (/ (+ phi2 phi1) 2))) |
4 calls. Slowest were:
| 71.0ms | (* (- lambda1 lambda2) (log (exp (cos (/ (+ phi2 phi1) 2))))) |
| 41.0ms | (exp (cos (/ (+ phi2 phi1) 2))) |
| 20.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 17.0ms | (log (exp (cos (/ (+ phi2 phi1) 2)))) |
43 calls. Slowest were:
| 232.0ms | (* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (log (exp (cos (/ (+ phi2 phi1) 2)))) (log (exp (cos (/ (+ phi2 phi1) 2))))) (log (exp (cos (/ (+ phi2 phi1) 2)))))) |
| 227.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
| 209.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
15 alts after pruning (15 fresh and 0 done)
Merged error: 4.7b
Found 4 expressions with local error:
| 2.6b | (cos (/ (+ phi2 phi1) 2)) |
| 0.6b | (expm1 (exp (cos (/ (+ phi2 phi1) 2)))) |
| 0.6b | (log (log1p (expm1 (exp (cos (/ (+ phi2 phi1) 2)))))) |
| 0.2b | (* (- lambda1 lambda2) (log (log1p (expm1 (exp (cos (/ (+ phi2 phi1) 2))))))) |
4 calls. Slowest were:
| 9.0ms | (* (- lambda1 lambda2) (log (log1p (expm1 (exp (cos (/ (+ phi2 phi1) 2))))))) |
| 5.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 1.0ms | (log (log1p (expm1 (exp (cos (/ (+ phi2 phi1) 2)))))) |
4 calls. Slowest were:
| 139.0ms | (* (- lambda1 lambda2) (log (log1p (expm1 (exp (cos (/ (+ phi2 phi1) 2))))))) |
| 105.0ms | (log (log1p (expm1 (exp (cos (/ (+ phi2 phi1) 2)))))) |
| 97.0ms | (expm1 (exp (cos (/ (+ phi2 phi1) 2)))) |
| 23.0ms | (cos (/ (+ phi2 phi1) 2)) |
34 calls. Slowest were:
| 354.0ms | (- (exp E) (+ (* 1/8 (* E (* (exp E) (pow phi2 2)))) (+ (* 1/4 (* E (* (exp E) (* phi1 phi2)))) 1))) |
| 308.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
| 259.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
14 alts after pruning (14 fresh and 0 done)
Merged error: 4.7b
Found 4 expressions with local error:
| 2.6b | (cos (/ (+ phi2 phi1) 2)) |
| 2.6b | (cos (/ (+ phi2 phi1) 2)) |
| 2.6b | (cos (/ (+ phi2 phi1) 2)) |
| 0.6b | (expm1 (exp (cos (/ (+ phi2 phi1) 2)))) |
4 calls. Slowest were:
| 4.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 4.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 4.0ms | (cos (/ (+ phi2 phi1) 2)) |
4 calls. Slowest were:
| 112.0ms | (expm1 (exp (cos (/ (+ phi2 phi1) 2)))) |
| 29.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 25.0ms | (cos (/ (+ phi2 phi1) 2)) |
| 25.0ms | (cos (/ (+ phi2 phi1) 2)) |
13 calls. Slowest were:
| 303.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
| 290.0ms | (- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2)))) |
| 281.0ms | (- (exp E) (+ (* 1/8 (* E (* (exp E) (pow phi2 2)))) (+ (* 1/4 (* E (* (exp E) (* phi1 phi2)))) 1))) |
14 alts after pruning (13 fresh and 1 done)
Merged error: 4.7b
0% (0.3b remaining)
Error of 3.8b against oracle of 3.6b and baseline of 3.8b