\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 \left(\sin \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_2 \cdot \cos \lambda_1\right)}{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2 + \left(\cos \phi_1 + \left(\cos \phi_2 \cdot \cos \lambda_1\right) \cdot \cos \lambda_2\right)} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r50303 = lambda1;
double r50304 = phi2;
double r50305 = cos(r50304);
double r50306 = lambda2;
double r50307 = r50303 - r50306;
double r50308 = sin(r50307);
double r50309 = r50305 * r50308;
double r50310 = phi1;
double r50311 = cos(r50310);
double r50312 = cos(r50307);
double r50313 = r50305 * r50312;
double r50314 = r50311 + r50313;
double r50315 = atan2(r50309, r50314);
double r50316 = r50303 + r50315;
return r50316;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r50317 = phi2;
double r50318 = cos(r50317);
double r50319 = lambda1;
double r50320 = sin(r50319);
double r50321 = lambda2;
double r50322 = cos(r50321);
double r50323 = r50320 * r50322;
double r50324 = sin(r50321);
double r50325 = cos(r50319);
double r50326 = r50324 * r50325;
double r50327 = r50323 - r50326;
double r50328 = r50318 * r50327;
double r50329 = r50320 * r50324;
double r50330 = r50329 * r50318;
double r50331 = phi1;
double r50332 = cos(r50331);
double r50333 = r50318 * r50325;
double r50334 = r50333 * r50322;
double r50335 = r50332 + r50334;
double r50336 = r50330 + r50335;
double r50337 = atan2(r50328, r50336);
double r50338 = r50337 + r50319;
return r50338;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied cos-diff0.9
Applied distribute-rgt-in0.9
Applied associate-+r+0.9
Simplified0.9
rmApplied sin-diff0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019179
(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)))))))