\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 \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \sin \lambda_1\right) \cdot \sin \lambda_2\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r135156 = lambda1;
double r135157 = lambda2;
double r135158 = r135156 - r135157;
double r135159 = sin(r135158);
double r135160 = phi2;
double r135161 = cos(r135160);
double r135162 = r135159 * r135161;
double r135163 = phi1;
double r135164 = cos(r135163);
double r135165 = sin(r135160);
double r135166 = r135164 * r135165;
double r135167 = sin(r135163);
double r135168 = r135167 * r135161;
double r135169 = cos(r135158);
double r135170 = r135168 * r135169;
double r135171 = r135166 - r135170;
double r135172 = atan2(r135162, r135171);
return r135172;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r135173 = lambda1;
double r135174 = sin(r135173);
double r135175 = lambda2;
double r135176 = cos(r135175);
double r135177 = r135174 * r135176;
double r135178 = cos(r135173);
double r135179 = -r135175;
double r135180 = sin(r135179);
double r135181 = r135178 * r135180;
double r135182 = r135177 + r135181;
double r135183 = phi2;
double r135184 = cos(r135183);
double r135185 = r135182 * r135184;
double r135186 = phi1;
double r135187 = cos(r135186);
double r135188 = sin(r135183);
double r135189 = r135187 * r135188;
double r135190 = log1p(r135189);
double r135191 = expm1(r135190);
double r135192 = r135178 * r135176;
double r135193 = sin(r135186);
double r135194 = r135193 * r135184;
double r135195 = r135192 * r135194;
double r135196 = r135194 * r135174;
double r135197 = sin(r135175);
double r135198 = r135196 * r135197;
double r135199 = r135195 + r135198;
double r135200 = r135191 - r135199;
double r135201 = atan2(r135185, r135200);
return r135201;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sub-neg13.1
Applied sin-sum6.5
Simplified6.5
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
rmApplied associate-*r*0.2
rmApplied expm1-log1p-u0.2
Final simplification0.2
herbie shell --seed 2020046 +o rules:numerics
(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))))))