\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{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r83102 = lambda1;
double r83103 = lambda2;
double r83104 = r83102 - r83103;
double r83105 = sin(r83104);
double r83106 = phi2;
double r83107 = cos(r83106);
double r83108 = r83105 * r83107;
double r83109 = phi1;
double r83110 = cos(r83109);
double r83111 = sin(r83106);
double r83112 = r83110 * r83111;
double r83113 = sin(r83109);
double r83114 = r83113 * r83107;
double r83115 = cos(r83104);
double r83116 = r83114 * r83115;
double r83117 = r83112 - r83116;
double r83118 = atan2(r83108, r83117);
return r83118;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r83119 = lambda1;
double r83120 = sin(r83119);
double r83121 = lambda2;
double r83122 = cos(r83121);
double r83123 = r83120 * r83122;
double r83124 = cos(r83119);
double r83125 = sin(r83121);
double r83126 = r83124 * r83125;
double r83127 = r83123 - r83126;
double r83128 = phi2;
double r83129 = cos(r83128);
double r83130 = r83127 * r83129;
double r83131 = phi1;
double r83132 = cos(r83131);
double r83133 = sin(r83128);
double r83134 = r83132 * r83133;
double r83135 = r83125 * r83120;
double r83136 = sin(r83131);
double r83137 = r83136 * r83129;
double r83138 = r83135 * r83137;
double r83139 = r83124 * r83122;
double r83140 = r83139 * r83137;
double r83141 = r83138 + r83140;
double r83142 = r83134 - r83141;
double r83143 = atan2(r83130, r83142);
return r83143;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
Simplified0.2
rmApplied pow10.2
Applied pow10.2
Applied pow-prod-down0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019212
(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))))))