R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)\left(\tan^{-1}_* \frac{\sqrt{{\left(\cos \left(\frac{\phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}{\sqrt{1 - \left({\left(\cos \left(\frac{\phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \left(\log \left(\sqrt{e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right) + \log \left(\sqrt{e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right)\right)\right)}} \cdot 2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3514853 = R;
double r3514854 = 2.0;
double r3514855 = phi1;
double r3514856 = phi2;
double r3514857 = r3514855 - r3514856;
double r3514858 = r3514857 / r3514854;
double r3514859 = sin(r3514858);
double r3514860 = pow(r3514859, r3514854);
double r3514861 = cos(r3514855);
double r3514862 = cos(r3514856);
double r3514863 = r3514861 * r3514862;
double r3514864 = lambda1;
double r3514865 = lambda2;
double r3514866 = r3514864 - r3514865;
double r3514867 = r3514866 / r3514854;
double r3514868 = sin(r3514867);
double r3514869 = r3514863 * r3514868;
double r3514870 = r3514869 * r3514868;
double r3514871 = r3514860 + r3514870;
double r3514872 = sqrt(r3514871);
double r3514873 = 1.0;
double r3514874 = r3514873 - r3514871;
double r3514875 = sqrt(r3514874);
double r3514876 = atan2(r3514872, r3514875);
double r3514877 = r3514854 * r3514876;
double r3514878 = r3514853 * r3514877;
return r3514878;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3514879 = phi2;
double r3514880 = 2.0;
double r3514881 = r3514879 / r3514880;
double r3514882 = cos(r3514881);
double r3514883 = phi1;
double r3514884 = r3514883 / r3514880;
double r3514885 = sin(r3514884);
double r3514886 = r3514882 * r3514885;
double r3514887 = cos(r3514884);
double r3514888 = sin(r3514881);
double r3514889 = r3514887 * r3514888;
double r3514890 = r3514886 - r3514889;
double r3514891 = pow(r3514890, r3514880);
double r3514892 = lambda1;
double r3514893 = lambda2;
double r3514894 = r3514892 - r3514893;
double r3514895 = r3514894 / r3514880;
double r3514896 = sin(r3514895);
double r3514897 = cos(r3514879);
double r3514898 = cos(r3514883);
double r3514899 = r3514897 * r3514898;
double r3514900 = r3514899 * r3514896;
double r3514901 = r3514896 * r3514900;
double r3514902 = r3514891 + r3514901;
double r3514903 = sqrt(r3514902);
double r3514904 = 1.0;
double r3514905 = exp(r3514896);
double r3514906 = sqrt(r3514905);
double r3514907 = log(r3514906);
double r3514908 = r3514907 + r3514907;
double r3514909 = r3514900 * r3514908;
double r3514910 = r3514891 + r3514909;
double r3514911 = r3514904 - r3514910;
double r3514912 = sqrt(r3514911);
double r3514913 = atan2(r3514903, r3514912);
double r3514914 = r3514913 * r3514880;
double r3514915 = R;
double r3514916 = r3514914 * r3514915;
return r3514916;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.9
rmApplied div-sub24.9
Applied sin-diff24.3
rmApplied div-sub24.3
Applied sin-diff14.4
rmApplied add-log-exp14.4
rmApplied add-sqr-sqrt14.4
Applied log-prod14.4
Final simplification14.4
herbie shell --seed 2019174
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* R (* 2.0 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))) (sqrt (- 1.0 (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))))))))