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{\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) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \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 \frac{\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) - \cos \left(\frac{\lambda_1 - \lambda_2}{2} + \frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt[3]{2}}\right)\right)}} \cdot 2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2334874 = R;
double r2334875 = 2.0;
double r2334876 = phi1;
double r2334877 = phi2;
double r2334878 = r2334876 - r2334877;
double r2334879 = r2334878 / r2334875;
double r2334880 = sin(r2334879);
double r2334881 = pow(r2334880, r2334875);
double r2334882 = cos(r2334876);
double r2334883 = cos(r2334877);
double r2334884 = r2334882 * r2334883;
double r2334885 = lambda1;
double r2334886 = lambda2;
double r2334887 = r2334885 - r2334886;
double r2334888 = r2334887 / r2334875;
double r2334889 = sin(r2334888);
double r2334890 = r2334884 * r2334889;
double r2334891 = r2334890 * r2334889;
double r2334892 = r2334881 + r2334891;
double r2334893 = sqrt(r2334892);
double r2334894 = 1.0;
double r2334895 = r2334894 - r2334892;
double r2334896 = sqrt(r2334895);
double r2334897 = atan2(r2334893, r2334896);
double r2334898 = r2334875 * r2334897;
double r2334899 = r2334874 * r2334898;
return r2334899;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2334900 = lambda1;
double r2334901 = lambda2;
double r2334902 = r2334900 - r2334901;
double r2334903 = 2.0;
double r2334904 = r2334902 / r2334903;
double r2334905 = sin(r2334904);
double r2334906 = phi2;
double r2334907 = cos(r2334906);
double r2334908 = phi1;
double r2334909 = cos(r2334908);
double r2334910 = r2334907 * r2334909;
double r2334911 = r2334910 * r2334905;
double r2334912 = r2334905 * r2334911;
double r2334913 = r2334908 - r2334906;
double r2334914 = r2334913 / r2334903;
double r2334915 = sin(r2334914);
double r2334916 = pow(r2334915, r2334903);
double r2334917 = r2334912 + r2334916;
double r2334918 = sqrt(r2334917);
double r2334919 = 1.0;
double r2334920 = r2334904 + r2334904;
double r2334921 = cos(r2334920);
double r2334922 = r2334921 * r2334905;
double r2334923 = r2334905 - r2334922;
double r2334924 = cbrt(r2334923);
double r2334925 = 2.0;
double r2334926 = cbrt(r2334925);
double r2334927 = r2334924 / r2334926;
double r2334928 = r2334910 * r2334927;
double r2334929 = r2334905 * r2334928;
double r2334930 = r2334916 + r2334929;
double r2334931 = r2334919 - r2334930;
double r2334932 = sqrt(r2334931);
double r2334933 = atan2(r2334918, r2334932);
double r2334934 = r2334933 * r2334903;
double r2334935 = R;
double r2334936 = r2334934 * r2334935;
return r2334936;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.8
rmApplied add-cbrt-cube24.8
rmApplied sin-mult24.8
Applied associate-*l/24.8
Applied cbrt-div24.8
Simplified24.8
Final simplification24.8
herbie shell --seed 2019171 +o rules:numerics
(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))))))))))