\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\cos \phi_1 \cdot \sin \phi_2 - \frac{\left(\cos \phi_2 \cdot \sin \phi_1\right) \cdot \left({\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{3} + {\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}\right)}{\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) + {\left(\cos \lambda_2 \cdot \cos \lambda_1\right)}^{2}}}(FPCore (lambda1 lambda2 phi1 phi2) :precision binary64 (atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))
(FPCore (lambda1 lambda2 phi1 phi2)
:precision binary64
(atan2
(*
(cos phi2)
(- (* (cos lambda2) (sin lambda1)) (* (cos lambda1) (sin lambda2))))
(-
(* (cos phi1) (sin phi2))
(/
(*
(* (cos phi2) (sin phi1))
(+
(pow (* (cos lambda2) (cos lambda1)) 3.0)
(pow (* (sin lambda1) (sin lambda2)) 3.0)))
(+
(-
(* (* (sin lambda1) (sin lambda2)) (* (sin lambda1) (sin lambda2)))
(* (* (cos lambda2) (cos lambda1)) (* (sin lambda1) (sin lambda2))))
(pow (* (cos lambda2) (cos lambda1)) 2.0))))))double code(double lambda1, double lambda2, double phi1, double phi2) {
return atan2((sin(lambda1 - lambda2) * cos(phi2)), ((cos(phi1) * sin(phi2)) - ((sin(phi1) * cos(phi2)) * cos(lambda1 - lambda2))));
}
double code(double lambda1, double lambda2, double phi1, double phi2) {
return atan2((cos(phi2) * ((cos(lambda2) * sin(lambda1)) - (cos(lambda1) * sin(lambda2)))), ((cos(phi1) * sin(phi2)) - (((cos(phi2) * sin(phi1)) * (pow((cos(lambda2) * cos(lambda1)), 3.0) + pow((sin(lambda1) * sin(lambda2)), 3.0))) / ((((sin(lambda1) * sin(lambda2)) * (sin(lambda1) * sin(lambda2))) - ((cos(lambda2) * cos(lambda1)) * (sin(lambda1) * sin(lambda2)))) + pow((cos(lambda2) * cos(lambda1)), 2.0)))));
}















Bits error versus lambda1















Bits error versus lambda2















Bits error versus phi1















Bits error versus phi2
Results
| Alternative 1 | |
|---|---|
| Error | 0.2 |
| Cost | 91136 |
| Alternative 2 | |
|---|---|
| Error | 3.6 |
| Cost | 84936 |
| Alternative 3 | |
|---|---|
| Error | 6.7 |
| Cost | 71680 |
| Alternative 4 | |
|---|---|
| Error | 7.3 |
| Cost | 71880 |
| Alternative 5 | |
|---|---|
| Error | 7.9 |
| Cost | 65608 |
| Alternative 6 | |
|---|---|
| Error | 7.9 |
| Cost | 65480 |
| Alternative 7 | |
|---|---|
| Error | 13.3 |
| Cost | 52224 |
| Alternative 8 | |
|---|---|
| Error | 13.5 |
| Cost | 52738 |
| Alternative 9 | |
|---|---|
| Error | 16.7 |
| Cost | 52424 |
| Alternative 10 | |
|---|---|
| Error | 22.0 |
| Cost | 45696 |
| Alternative 11 | |
|---|---|
| Error | 57.8 |
| Cost | 64 |
| Alternative 12 | |
|---|---|
| Error | 57.7 |
| Cost | 64 |

Initial program 13.3
rmApplied sin-diff_binary64_19196.7
Simplified6.7
rmApplied cos-diff_binary64_19200.2
rmApplied flip3-+_binary64_17860.2
Applied associate-*r/_binary64_17250.2
rmApplied pow2_binary64_18640.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2021044
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
:precision binary64
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))