\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 r4426721 = lambda1;
double r4426722 = phi2;
double r4426723 = cos(r4426722);
double r4426724 = lambda2;
double r4426725 = r4426721 - r4426724;
double r4426726 = sin(r4426725);
double r4426727 = r4426723 * r4426726;
double r4426728 = phi1;
double r4426729 = cos(r4426728);
double r4426730 = cos(r4426725);
double r4426731 = r4426723 * r4426730;
double r4426732 = r4426729 + r4426731;
double r4426733 = atan2(r4426727, r4426732);
double r4426734 = r4426721 + r4426733;
return r4426734;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4426735 = phi2;
double r4426736 = cos(r4426735);
double r4426737 = lambda1;
double r4426738 = lambda2;
double r4426739 = r4426737 - r4426738;
double r4426740 = sin(r4426739);
double r4426741 = r4426736 * r4426740;
double r4426742 = cos(r4426739);
double r4426743 = r4426736 * r4426742;
double r4426744 = phi1;
double r4426745 = cos(r4426744);
double r4426746 = r4426743 + r4426745;
double r4426747 = atan2(r4426741, r4426746);
double r4426748 = r4426747 + r4426737;
return r4426748;
}



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