\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{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{{\left(\cos \phi_1\right)}^{3} + {\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right)}^{3}}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 - \cos \phi_1\right) + \cos \phi_1 \cdot \cos \phi_1} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r56351 = lambda1;
double r56352 = phi2;
double r56353 = cos(r56352);
double r56354 = lambda2;
double r56355 = r56351 - r56354;
double r56356 = sin(r56355);
double r56357 = r56353 * r56356;
double r56358 = phi1;
double r56359 = cos(r56358);
double r56360 = cos(r56355);
double r56361 = r56353 * r56360;
double r56362 = r56359 + r56361;
double r56363 = atan2(r56357, r56362);
double r56364 = r56351 + r56363;
return r56364;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r56365 = lambda1;
double r56366 = phi2;
double r56367 = cos(r56366);
double r56368 = sin(r56365);
double r56369 = lambda2;
double r56370 = cos(r56369);
double r56371 = r56368 * r56370;
double r56372 = cos(r56365);
double r56373 = sin(r56369);
double r56374 = r56372 * r56373;
double r56375 = r56371 - r56374;
double r56376 = r56367 * r56375;
double r56377 = phi1;
double r56378 = cos(r56377);
double r56379 = 3.0;
double r56380 = pow(r56378, r56379);
double r56381 = r56372 * r56370;
double r56382 = r56381 * r56367;
double r56383 = pow(r56382, r56379);
double r56384 = r56380 + r56383;
double r56385 = r56382 - r56378;
double r56386 = r56382 * r56385;
double r56387 = r56378 * r56378;
double r56388 = r56386 + r56387;
double r56389 = r56384 / r56388;
double r56390 = r56368 * r56373;
double r56391 = r56390 * r56367;
double r56392 = r56389 + r56391;
double r56393 = atan2(r56376, r56392);
double r56394 = r56365 + r56393;
return r56394;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 1.0
rmApplied cos-diff1.0
Applied distribute-rgt-in1.0
Applied associate-+r+1.0
rmApplied sin-diff0.2
rmApplied flip3-+0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020056
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
:precision binary64
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))