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(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\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}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\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 \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)}} \cdot 2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4476864 = R;
double r4476865 = 2.0;
double r4476866 = phi1;
double r4476867 = phi2;
double r4476868 = r4476866 - r4476867;
double r4476869 = r4476868 / r4476865;
double r4476870 = sin(r4476869);
double r4476871 = pow(r4476870, r4476865);
double r4476872 = cos(r4476866);
double r4476873 = cos(r4476867);
double r4476874 = r4476872 * r4476873;
double r4476875 = lambda1;
double r4476876 = lambda2;
double r4476877 = r4476875 - r4476876;
double r4476878 = r4476877 / r4476865;
double r4476879 = sin(r4476878);
double r4476880 = r4476874 * r4476879;
double r4476881 = r4476880 * r4476879;
double r4476882 = r4476871 + r4476881;
double r4476883 = sqrt(r4476882);
double r4476884 = 1.0;
double r4476885 = r4476884 - r4476882;
double r4476886 = sqrt(r4476885);
double r4476887 = atan2(r4476883, r4476886);
double r4476888 = r4476865 * r4476887;
double r4476889 = r4476864 * r4476888;
return r4476889;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4476890 = phi1;
double r4476891 = 2.0;
double r4476892 = r4476890 / r4476891;
double r4476893 = sin(r4476892);
double r4476894 = phi2;
double r4476895 = r4476894 / r4476891;
double r4476896 = cos(r4476895);
double r4476897 = r4476893 * r4476896;
double r4476898 = cos(r4476892);
double r4476899 = sin(r4476895);
double r4476900 = r4476898 * r4476899;
double r4476901 = r4476897 - r4476900;
double r4476902 = pow(r4476901, r4476891);
double r4476903 = cos(r4476890);
double r4476904 = cos(r4476894);
double r4476905 = r4476903 * r4476904;
double r4476906 = lambda1;
double r4476907 = lambda2;
double r4476908 = r4476906 - r4476907;
double r4476909 = r4476908 / r4476891;
double r4476910 = sin(r4476909);
double r4476911 = r4476905 * r4476910;
double r4476912 = r4476911 * r4476910;
double r4476913 = r4476902 + r4476912;
double r4476914 = sqrt(r4476913);
double r4476915 = 1.0;
double r4476916 = r4476909 + r4476909;
double r4476917 = cos(r4476916);
double r4476918 = r4476917 * r4476910;
double r4476919 = r4476910 - r4476918;
double r4476920 = cbrt(r4476919);
double r4476921 = 2.0;
double r4476922 = cbrt(r4476921);
double r4476923 = r4476920 / r4476922;
double r4476924 = r4476911 * r4476923;
double r4476925 = r4476902 + r4476924;
double r4476926 = r4476915 - r4476925;
double r4476927 = sqrt(r4476926);
double r4476928 = atan2(r4476914, r4476927);
double r4476929 = r4476928 * r4476891;
double r4476930 = R;
double r4476931 = r4476929 * r4476930;
return r4476931;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.1
rmApplied div-sub24.1
Applied sin-diff23.5
rmApplied div-sub23.5
Applied sin-diff13.9
rmApplied add-cbrt-cube14.0
rmApplied sin-mult13.9
Applied associate-*l/13.9
Applied cbrt-div14.0
Simplified14.0
Final simplification14.0
herbie shell --seed 2019200
(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))))))))))