\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 r5159491 = lambda1;
double r5159492 = phi2;
double r5159493 = cos(r5159492);
double r5159494 = lambda2;
double r5159495 = r5159491 - r5159494;
double r5159496 = sin(r5159495);
double r5159497 = r5159493 * r5159496;
double r5159498 = phi1;
double r5159499 = cos(r5159498);
double r5159500 = cos(r5159495);
double r5159501 = r5159493 * r5159500;
double r5159502 = r5159499 + r5159501;
double r5159503 = atan2(r5159497, r5159502);
double r5159504 = r5159491 + r5159503;
return r5159504;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r5159505 = phi2;
double r5159506 = cos(r5159505);
double r5159507 = lambda1;
double r5159508 = lambda2;
double r5159509 = r5159507 - r5159508;
double r5159510 = sin(r5159509);
double r5159511 = r5159506 * r5159510;
double r5159512 = cos(r5159509);
double r5159513 = r5159506 * r5159512;
double r5159514 = phi1;
double r5159515 = cos(r5159514);
double r5159516 = r5159513 + r5159515;
double r5159517 = atan2(r5159511, r5159516);
double r5159518 = r5159517 + r5159507;
return r5159518;
}



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 2019107
(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)))))))