\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)}\tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right) + \cos \phi_1} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r7291973 = lambda1;
double r7291974 = phi2;
double r7291975 = cos(r7291974);
double r7291976 = lambda2;
double r7291977 = r7291973 - r7291976;
double r7291978 = sin(r7291977);
double r7291979 = r7291975 * r7291978;
double r7291980 = phi1;
double r7291981 = cos(r7291980);
double r7291982 = cos(r7291977);
double r7291983 = r7291975 * r7291982;
double r7291984 = r7291981 + r7291983;
double r7291985 = atan2(r7291979, r7291984);
double r7291986 = r7291973 + r7291985;
return r7291986;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r7291987 = phi2;
double r7291988 = cos(r7291987);
double r7291989 = lambda1;
double r7291990 = lambda2;
double r7291991 = r7291989 - r7291990;
double r7291992 = sin(r7291991);
double r7291993 = r7291988 * r7291992;
double r7291994 = cos(r7291991);
double r7291995 = r7291988 * r7291994;
double r7291996 = phi1;
double r7291997 = cos(r7291996);
double r7291998 = r7291995 + r7291997;
double r7291999 = atan2(r7291993, r7291998);
double r7292000 = r7291999 + r7291989;
return r7292000;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0
Final simplification0
herbie shell --seed 2019128
(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)))))))