\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)}{\log \left(e^{\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)}\right) + \cos \phi_2 \cdot \log \left(e^{\sin \lambda_1 \cdot \sin \lambda_2}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r36789 = lambda1;
double r36790 = phi2;
double r36791 = cos(r36790);
double r36792 = lambda2;
double r36793 = r36789 - r36792;
double r36794 = sin(r36793);
double r36795 = r36791 * r36794;
double r36796 = phi1;
double r36797 = cos(r36796);
double r36798 = cos(r36793);
double r36799 = r36791 * r36798;
double r36800 = r36797 + r36799;
double r36801 = atan2(r36795, r36800);
double r36802 = r36789 + r36801;
return r36802;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r36803 = lambda1;
double r36804 = phi2;
double r36805 = cos(r36804);
double r36806 = sin(r36803);
double r36807 = lambda2;
double r36808 = cos(r36807);
double r36809 = r36806 * r36808;
double r36810 = cos(r36803);
double r36811 = -r36807;
double r36812 = sin(r36811);
double r36813 = r36810 * r36812;
double r36814 = r36809 + r36813;
double r36815 = r36805 * r36814;
double r36816 = r36808 * r36805;
double r36817 = phi1;
double r36818 = cos(r36817);
double r36819 = fma(r36810, r36816, r36818);
double r36820 = exp(r36819);
double r36821 = log(r36820);
double r36822 = sin(r36807);
double r36823 = r36806 * r36822;
double r36824 = exp(r36823);
double r36825 = log(r36824);
double r36826 = r36805 * r36825;
double r36827 = r36821 + r36826;
double r36828 = atan2(r36815, r36827);
double r36829 = r36803 + r36828;
return r36829;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.8
rmApplied cos-diff0.8
Applied distribute-lft-in0.8
Applied associate-+r+0.8
Simplified0.8
rmApplied sub-neg0.8
Applied sin-sum0.2
Simplified0.2
rmApplied add-log-exp0.2
rmApplied add-log-exp0.3
Final simplification0.3
herbie shell --seed 2019323 +o rules:numerics
(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)))))))