\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(\sqrt[3]{\cos \lambda_2} \cdot \left(\sin \lambda_1 \cdot \left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sqrt[3]{\cos \lambda_2}\right)\right) \cdot \sqrt[3]{\cos \lambda_2}\right)\right) - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r3810092 = lambda1;
double r3810093 = lambda2;
double r3810094 = r3810092 - r3810093;
double r3810095 = sin(r3810094);
double r3810096 = phi2;
double r3810097 = cos(r3810096);
double r3810098 = r3810095 * r3810097;
double r3810099 = phi1;
double r3810100 = cos(r3810099);
double r3810101 = sin(r3810096);
double r3810102 = r3810100 * r3810101;
double r3810103 = sin(r3810099);
double r3810104 = r3810103 * r3810097;
double r3810105 = cos(r3810094);
double r3810106 = r3810104 * r3810105;
double r3810107 = r3810102 - r3810106;
double r3810108 = atan2(r3810098, r3810107);
return r3810108;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r3810109 = lambda2;
double r3810110 = cos(r3810109);
double r3810111 = cbrt(r3810110);
double r3810112 = lambda1;
double r3810113 = sin(r3810112);
double r3810114 = expm1(r3810111);
double r3810115 = log1p(r3810114);
double r3810116 = r3810115 * r3810111;
double r3810117 = r3810113 * r3810116;
double r3810118 = r3810111 * r3810117;
double r3810119 = cos(r3810112);
double r3810120 = sin(r3810109);
double r3810121 = r3810119 * r3810120;
double r3810122 = r3810118 - r3810121;
double r3810123 = phi2;
double r3810124 = cos(r3810123);
double r3810125 = r3810122 * r3810124;
double r3810126 = phi1;
double r3810127 = cos(r3810126);
double r3810128 = sin(r3810123);
double r3810129 = r3810127 * r3810128;
double r3810130 = sin(r3810126);
double r3810131 = r3810130 * r3810124;
double r3810132 = r3810119 * r3810110;
double r3810133 = r3810131 * r3810132;
double r3810134 = r3810120 * r3810113;
double r3810135 = r3810134 * r3810131;
double r3810136 = r3810133 + r3810135;
double r3810137 = r3810129 - r3810136;
double r3810138 = atan2(r3810125, r3810137);
return r3810138;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.2
rmApplied sin-diff6.8
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
rmApplied log1p-expm1-u0.2
Final simplification0.2
herbie shell --seed 2019172 +o rules:numerics
(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))))))