\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(\sin \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \left(\sin \lambda_1 \cdot \sin \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 r96117 = lambda1;
double r96118 = lambda2;
double r96119 = r96117 - r96118;
double r96120 = sin(r96119);
double r96121 = phi2;
double r96122 = cos(r96121);
double r96123 = r96120 * r96122;
double r96124 = phi1;
double r96125 = cos(r96124);
double r96126 = sin(r96121);
double r96127 = r96125 * r96126;
double r96128 = sin(r96124);
double r96129 = r96128 * r96122;
double r96130 = cos(r96119);
double r96131 = r96129 * r96130;
double r96132 = r96127 - r96131;
double r96133 = atan2(r96123, r96132);
return r96133;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r96134 = lambda1;
double r96135 = sin(r96134);
double r96136 = lambda2;
double r96137 = cos(r96136);
double r96138 = r96135 * r96137;
double r96139 = cos(r96134);
double r96140 = sin(r96136);
double r96141 = r96139 * r96140;
double r96142 = r96138 - r96141;
double r96143 = phi2;
double r96144 = cos(r96143);
double r96145 = r96142 * r96144;
double r96146 = phi1;
double r96147 = cos(r96146);
double r96148 = sin(r96143);
double r96149 = r96147 * r96148;
double r96150 = sin(r96146);
double r96151 = r96139 * r96137;
double r96152 = r96144 * r96151;
double r96153 = r96150 * r96152;
double r96154 = r96135 * r96140;
double r96155 = r96150 * r96144;
double r96156 = r96154 * r96155;
double r96157 = r96153 + r96156;
double r96158 = r96149 - r96157;
double r96159 = atan2(r96145, r96158);
return r96159;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.4
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
Simplified0.2
Taylor expanded around inf 0.2
Final simplification0.2
herbie shell --seed 2019195
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))