\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(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)}^{3}}{\cos \phi_1 \cdot \cos \phi_1 + \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \frac{{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)}^{2} - {\left(\cos \phi_1\right)}^{2}}{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \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 r44662 = lambda1;
double r44663 = phi2;
double r44664 = cos(r44663);
double r44665 = lambda2;
double r44666 = r44662 - r44665;
double r44667 = sin(r44666);
double r44668 = r44664 * r44667;
double r44669 = phi1;
double r44670 = cos(r44669);
double r44671 = cos(r44666);
double r44672 = r44664 * r44671;
double r44673 = r44670 + r44672;
double r44674 = atan2(r44668, r44673);
double r44675 = r44662 + r44674;
return r44675;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r44676 = lambda1;
double r44677 = phi2;
double r44678 = cos(r44677);
double r44679 = sin(r44676);
double r44680 = lambda2;
double r44681 = cos(r44680);
double r44682 = r44679 * r44681;
double r44683 = cos(r44676);
double r44684 = sin(r44680);
double r44685 = r44683 * r44684;
double r44686 = r44682 - r44685;
double r44687 = r44678 * r44686;
double r44688 = phi1;
double r44689 = cos(r44688);
double r44690 = 3.0;
double r44691 = pow(r44689, r44690);
double r44692 = r44683 * r44681;
double r44693 = r44678 * r44692;
double r44694 = pow(r44693, r44690);
double r44695 = r44691 + r44694;
double r44696 = r44689 * r44689;
double r44697 = 2.0;
double r44698 = pow(r44693, r44697);
double r44699 = pow(r44689, r44697);
double r44700 = r44698 - r44699;
double r44701 = r44693 + r44689;
double r44702 = r44700 / r44701;
double r44703 = r44693 * r44702;
double r44704 = r44696 + r44703;
double r44705 = r44695 / r44704;
double r44706 = r44679 * r44684;
double r44707 = r44706 * r44678;
double r44708 = r44705 + r44707;
double r44709 = atan2(r44687, r44708);
double r44710 = r44676 + r44709;
return r44710;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.8
rmApplied sin-diff0.8
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
Applied associate-+r+0.2
Simplified0.2
rmApplied flip3-+0.3
Simplified0.3
rmApplied flip--0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019303
(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)))))))