\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 \left(-\lambda_2\right)\right)}{\frac{\sqrt[3]{{\left({\left(\cos \phi_1\right)}^{3}\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 r52670 = lambda1;
double r52671 = phi2;
double r52672 = cos(r52671);
double r52673 = lambda2;
double r52674 = r52670 - r52673;
double r52675 = sin(r52674);
double r52676 = r52672 * r52675;
double r52677 = phi1;
double r52678 = cos(r52677);
double r52679 = cos(r52674);
double r52680 = r52672 * r52679;
double r52681 = r52678 + r52680;
double r52682 = atan2(r52676, r52681);
double r52683 = r52670 + r52682;
return r52683;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r52684 = lambda1;
double r52685 = phi2;
double r52686 = cos(r52685);
double r52687 = sin(r52684);
double r52688 = lambda2;
double r52689 = cos(r52688);
double r52690 = r52687 * r52689;
double r52691 = cos(r52684);
double r52692 = -r52688;
double r52693 = sin(r52692);
double r52694 = r52691 * r52693;
double r52695 = r52690 + r52694;
double r52696 = r52686 * r52695;
double r52697 = phi1;
double r52698 = cos(r52697);
double r52699 = 3.0;
double r52700 = pow(r52698, r52699);
double r52701 = pow(r52700, r52699);
double r52702 = cbrt(r52701);
double r52703 = r52691 * r52689;
double r52704 = r52703 * r52686;
double r52705 = pow(r52704, r52699);
double r52706 = r52702 + r52705;
double r52707 = r52704 - r52698;
double r52708 = r52704 * r52707;
double r52709 = r52698 * r52698;
double r52710 = r52708 + r52709;
double r52711 = r52706 / r52710;
double r52712 = sin(r52688);
double r52713 = r52687 * r52712;
double r52714 = r52713 * r52686;
double r52715 = r52711 + r52714;
double r52716 = atan2(r52696, r52715);
double r52717 = r52684 + r52716;
return r52717;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied sub-neg0.9
Applied sin-sum0.9
Simplified0.9
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
Applied associate-+r+0.2
rmApplied flip3-+0.3
Simplified0.3
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020021
(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)))))))