


Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) < -inf.0 or 1.6729532762974084e+301 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) Initial program 60.6
Taylor expanded around 0 46.8
if -inf.0 < (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))) < 1.6729532762974084e+301Initial program 2.1
Final simplification28.7
herbie shell --seed 2019004
(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: 4.4m)Debug log
1 calls. Slowest were:
| 109.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: 41.1b
Found 4 expressions with local error:
| 39.5b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 2.2b | (cos (/ (+ phi1 phi2) 2)) |
| 2.2b | (cos (/ (+ phi1 phi2) 2)) |
| 0.2b | (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) |
4 calls. Slowest were:
| 42.0ms | (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) |
| 25.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 4.0ms | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 439.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 89.0ms | (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) |
| 15.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 15.0ms | (cos (/ (+ phi1 phi2) 2)) |
118 calls. Slowest were:
| 1.2s | (* (* (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) |
| 738.0ms | (sqrt (+ (* (* (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ phi1 phi2))) (* (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (* (- (pow phi1 3) (pow phi2 3)) (- (* phi1 phi1) (* phi2 phi2)))))) |
| 617.0ms | (sqrt (+ (* (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2)))) (+ phi1 phi2)) (* (+ lambda1 lambda2) (* (- phi1 phi2) (- (* phi1 phi1) (* phi2 phi2)))))) |
8 alts after pruning (7 fresh and 1 done)
Merged error: 25.3b
Found 4 expressions with local error:
| 39.5b | (sqrt (+ (* (* (- lambda1 lambda2) (cbrt (* (* (cos (/ (+ phi1 phi2) 2)) (cos (/ (+ phi1 phi2) 2))) (cos (/ (+ phi1 phi2) 2))))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 2.2b | (cos (/ (+ phi1 phi2) 2)) |
| 2.2b | (cos (/ (+ phi1 phi2) 2)) |
| 2.2b | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 53.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cbrt (* (* (cos (/ (+ phi1 phi2) 2)) (cos (/ (+ phi1 phi2) 2))) (cos (/ (+ phi1 phi2) 2))))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 4.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 2.0ms | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 435.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cbrt (* (* (cos (/ (+ phi1 phi2) 2)) (cos (/ (+ phi1 phi2) 2))) (cos (/ (+ phi1 phi2) 2))))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 24.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 16.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 15.0ms | (cos (/ (+ phi1 phi2) 2)) |
154 calls. Slowest were:
| 817.0ms | (sqrt (+ (* (* (* (- (pow lambda1 3) (pow lambda2 3)) (cbrt (* (+ (cos (+ (/ (+ phi1 phi2) 2) (/ (+ phi1 phi2) 2))) (cos (- (/ (+ phi1 phi2) 2) (/ (+ phi1 phi2) 2)))) (cos (/ (+ phi1 phi2) 2))))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2)))) (* (* (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (cbrt 2)) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (* (- phi1 phi2) (- (pow phi1 3) (pow phi2 3)))))) |
| 798.0ms | (sqrt (+ (* (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cbrt (* (* (cos (/ (+ phi1 phi2) 2)) (cos (/ (+ phi1 phi2) 2))) (cos (/ (+ phi1 phi2) 2))))) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2)))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ phi1 phi2))) (* (* (+ lambda1 lambda2) (+ lambda1 lambda2)) (* (- (pow phi1 3) (pow phi2 3)) (- (* phi1 phi1) (* phi2 phi2)))))) |
| 638.0ms | (sqrt (+ (* (* (* (- lambda1 lambda2) (cbrt (* (+ (cos (+ (/ (+ phi1 phi2) 2) (/ (+ phi1 phi2) 2))) (cos (- (/ (+ phi1 phi2) 2) (/ (+ phi1 phi2) 2)))) (cos (/ (+ phi1 phi2) 2))))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ phi1 phi2))) (* (* (cbrt 2) (+ (* 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: 23.0b
Found 4 expressions with local error:
| 39.5b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 39.5b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 39.5b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 2.2b | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 44.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 40.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 22.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
4 calls. Slowest were:
| 457.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 392.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 376.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 24.0ms | (cos (/ (+ phi1 phi2) 2)) |
222 calls. Slowest were:
| 764.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 phi1) (+ (* phi2 phi2) (* phi1 phi2))))) (* (* (+ lambda1 lambda2) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (* (- (pow phi1 3) (pow phi2 3)) (- (pow phi1 3) (pow phi2 3)))))) |
| 677.0ms | (sqrt (+ (* (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2)))) (* (+ phi1 phi2) (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))))) (* (+ lambda1 lambda2) (* (- (* phi1 phi1) (* phi2 phi2)) (- (pow phi1 3) (pow phi2 3)))))) |
| 630.0ms | (sqrt (+ (* (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (+ phi1 phi2)) (* (* (+ lambda1 lambda2) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (* (- phi1 phi2) (- (* phi1 phi1) (* phi2 phi2)))))) |
10 alts after pruning (9 fresh and 1 done)
Merged error: 23.0b
Found 4 expressions with local error:
| 39.5b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 39.5b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 39.5b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 39.5b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
4 calls. Slowest were:
| 42.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 26.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 22.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
4 calls. Slowest were:
| 437.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 433.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 420.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 418.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
292 calls. Slowest were:
| 712.0ms | (sqrt (+ (* (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (+ phi1 phi2)) (* (* (+ lambda1 lambda2) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (* (- phi1 phi2) (- (* phi1 phi1) (* phi2 phi2)))))) |
| 670.0ms | (sqrt (+ (* (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))))) (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (* (- (pow phi1 3) (pow phi2 3)) (- (pow phi1 3) (pow phi2 3)))))) |
| 604.0ms | (sqrt (+ (* (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2)))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ phi1 phi2))) (* (+ lambda1 lambda2) (* (- (pow phi1 3) (pow phi2 3)) (- (* phi1 phi1) (* phi2 phi2)))))) |
10 alts after pruning (9 fresh and 1 done)
Merged error: 23.0b
56.3% (6.4b remaining)
Error of 28.7b against oracle of 22.4b and baseline of 37.0b