


Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi2 < 1.1229085965198049e-150 or 4.700615090900083e-96 < phi2 < 6.178213661611158e+127Initial program 34.6
rmApplied associate-*l*34.6
rmApplied add-cbrt-cube34.6
if 1.1229085965198049e-150 < phi2 < 4.700615090900083e-96Initial program 30.4
rmApplied associate-*l*30.4
rmApplied add-cbrt-cube30.5
rmApplied flip3--34.6
Applied associate-*r/36.6
Applied cos-mult36.6
Applied associate-*l/36.6
Applied cbrt-div36.6
Applied associate-*l/36.6
Applied associate-*r/36.6
Applied frac-add40.0
Applied sqrt-div40.1
Simplified31.9
if 6.178213661611158e+127 < phi2 Initial program 55.2
rmApplied associate-*l*55.2
Taylor expanded around 0 16.9
Final simplification32.3
herbie shell --seed 2019007
(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: 5.8m)Debug log
1 calls. Slowest were:
| 111.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: 40.0b
Found 4 expressions with local error:
| 39.0b | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 3.4b | (cos (/ (+ phi1 phi2) 2)) |
| 3.4b | (cos (/ (+ phi1 phi2) 2)) |
| 0.2b | (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) |
4 calls. Slowest were:
| 46.0ms | (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) |
| 23.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:
| 373.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 127.0ms | (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) |
| 26.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 25.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))))) |
| 606.0ms | (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))) |
| 604.0ms | (sqrt (+ (* (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2)))) (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2)))) (* (* (+ lambda1 lambda2) (+ lambda1 lambda2)) (* (- (pow phi1 3) (pow phi2 3)) (- phi1 phi2))))) |
8 alts after pruning (8 fresh and 0 done)
Merged error: 24.3b
Found 4 expressions with local error:
| 39.0b | (sqrt (+ (* (- lambda1 lambda2) (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 3.4b | (cos (/ (+ phi1 phi2) 2)) |
| 3.4b | (cos (/ (+ phi1 phi2) 2)) |
| 0.2b | (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) |
4 calls. Slowest were:
| 36.0ms | (sqrt (+ (* (- lambda1 lambda2) (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 15.0ms | (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) |
| 2.0ms | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 478.0ms | (sqrt (+ (* (- lambda1 lambda2) (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 150.0ms | (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) |
| 20.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 19.0ms | (cos (/ (+ phi1 phi2) 2)) |
93 calls. Slowest were:
| 1.0s | (* (* (* (cos (/ (+ phi1 phi2) 2)) (cos (/ (+ phi1 phi2) 2))) (cos (/ (+ phi1 phi2) 2))) (* (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) |
| 597.0ms | (* (* (* (cos (/ (+ phi1 phi2) 2)) (cos (/ (+ phi1 phi2) 2))) (cos (/ (+ phi1 phi2) 2))) (* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (cos (/ (+ phi1 phi2) 2)) (cos (/ (+ phi1 phi2) 2))) (cos (/ (+ phi1 phi2) 2))))) |
| 523.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (* (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))) (* (- (pow phi1 3) (pow phi2 3)) (- phi1 phi2))))) |
7 alts after pruning (7 fresh and 0 done)
Merged error: 24.3b
Found 4 expressions with local error:
| 39.0b | (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)))) |
| 3.4b | (cos (/ (+ phi1 phi2) 2)) |
| 3.4b | (cos (/ (+ phi1 phi2) 2)) |
| 3.4b | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 64.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)))) |
| 3.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 3.0ms | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 436.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)) |
| 15.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 14.0ms | (cos (/ (+ phi1 phi2) 2)) |
154 calls. Slowest were:
| 741.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)))) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))))) (* (+ phi1 phi2) (+ phi1 phi2))) (* (* (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))) (* (cbrt 2) (+ lambda1 lambda2))) (* (- (* phi1 phi1) (* phi2 phi2)) (- (* phi1 phi1) (* phi2 phi2)))))) |
| 728.0ms | (sqrt (+ (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (* (cbrt (* (+ (cos (+ (/ (+ phi1 phi2) 2) (/ (+ phi1 phi2) 2))) (cos (- (/ (+ phi1 phi2) 2) (/ (+ phi1 phi2) 2)))) (cos (/ (+ phi1 phi2) 2)))) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))))) (* (+ phi1 phi2) (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))))) (* (* (+ lambda1 lambda2) (* (cbrt 2) (+ lambda1 lambda2))) (* (- (* phi1 phi1) (* phi2 phi2)) (- (pow phi1 3) (pow phi2 3)))))) |
| 660.0ms | (sqrt (+ (* (* (- (* lambda1 lambda1) (* lambda2 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))) (* (* (+ lambda1 lambda2) (* (cbrt 2) (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))))) (* (- (pow phi1 3) (pow phi2 3)) (- (* phi1 phi1) (* phi2 phi2)))))) |
9 alts after pruning (8 fresh and 1 done)
Merged error: 21.9b
Found 4 expressions with local error:
| 39.0b | (sqrt (+ (* (- lambda1 lambda2) (* (* (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))))) (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 3.4b | (cos (/ (+ phi1 phi2) 2)) |
| 3.4b | (cos (/ (+ phi1 phi2) 2)) |
| 3.4b | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 265.0ms | (sqrt (+ (* (- lambda1 lambda2) (* (* (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))))) (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 3.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 3.0ms | (cos (/ (+ phi1 phi2) 2)) |
4 calls. Slowest were:
| 411.0ms | (sqrt (+ (* (- lambda1 lambda2) (* (* (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))))) (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))))) (* (- phi1 phi2) (- phi1 phi2)))) |
| 23.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 16.0ms | (cos (/ (+ phi1 phi2) 2)) |
| 15.0ms | (cos (/ (+ phi1 phi2) 2)) |
658 calls. Slowest were:
| 845.0ms | (sqrt (+ (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (* (* (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))) (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2)))))) (cbrt (* (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) (* (cbrt (+ lambda1 lambda2)) (cbrt (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))))) (* (- (pow phi1 3) (pow phi2 3)) (- (pow phi1 3) (pow phi2 3)))))) |
| 813.0ms | (sqrt (+ (* (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (* (* (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2))))) (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2)))))) (cbrt (* (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) (* (* (cbrt (+ lambda1 lambda2)) (cbrt (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2))))) (cbrt (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))))) (* (- (pow phi1 3) (pow phi2 3)) (- (pow phi1 3) (pow phi2 3)))))) |
| 758.0ms | (sqrt (+ (* (* (- lambda1 lambda2) (* (* (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- (pow lambda1 3) (pow lambda2 3)) (cos (/ (+ phi1 phi2) 2))))) (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi1 phi2) 2)))))) (cbrt (* (cos (/ (+ phi1 phi2) 2)) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))))))) (* (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))) (+ (* phi1 phi1) (+ (* phi2 phi2) (* phi1 phi2))))) (* (* (cbrt (+ (* lambda1 lambda1) (+ (* lambda2 lambda2) (* lambda1 lambda2)))) (cbrt (+ lambda1 lambda2))) (* (- (pow phi1 3) (pow phi2 3)) (- (pow phi1 3) (pow phi2 3)))))) |
8 alts after pruning (7 fresh and 1 done)
Merged error: 21.9b
32.3% (10.0b remaining)
Error of 32.3b against oracle of 22.2b and baseline of 37.0b