\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\lambda_1 + \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{(\left(\cos \phi_2\right) \cdot \left(\cos \left(\lambda_1 - \lambda_2\right)\right) + \left(\cos \phi_1\right))_*}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2584888 = lambda1;
double r2584889 = phi2;
double r2584890 = cos(r2584889);
double r2584891 = lambda2;
double r2584892 = r2584888 - r2584891;
double r2584893 = sin(r2584892);
double r2584894 = r2584890 * r2584893;
double r2584895 = phi1;
double r2584896 = cos(r2584895);
double r2584897 = cos(r2584892);
double r2584898 = r2584890 * r2584897;
double r2584899 = r2584896 + r2584898;
double r2584900 = atan2(r2584894, r2584899);
double r2584901 = r2584888 + r2584900;
return r2584901;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2584902 = lambda1;
double r2584903 = lambda2;
double r2584904 = r2584902 - r2584903;
double r2584905 = sin(r2584904);
double r2584906 = phi2;
double r2584907 = cos(r2584906);
double r2584908 = r2584905 * r2584907;
double r2584909 = cos(r2584904);
double r2584910 = phi1;
double r2584911 = cos(r2584910);
double r2584912 = fma(r2584907, r2584909, r2584911);
double r2584913 = atan2(r2584908, r2584912);
double r2584914 = r2584902 + r2584913;
return r2584914;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0
Simplified0
Final simplification0
herbie shell --seed 2019112 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))