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)R \cdot \left(2 \cdot \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 \sqrt[3]{{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{3}}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r74924 = R;
double r74925 = 2.0;
double r74926 = phi1;
double r74927 = phi2;
double r74928 = r74926 - r74927;
double r74929 = r74928 / r74925;
double r74930 = sin(r74929);
double r74931 = pow(r74930, r74925);
double r74932 = cos(r74926);
double r74933 = cos(r74927);
double r74934 = r74932 * r74933;
double r74935 = lambda1;
double r74936 = lambda2;
double r74937 = r74935 - r74936;
double r74938 = r74937 / r74925;
double r74939 = sin(r74938);
double r74940 = r74934 * r74939;
double r74941 = r74940 * r74939;
double r74942 = r74931 + r74941;
double r74943 = sqrt(r74942);
double r74944 = 1.0;
double r74945 = r74944 - r74942;
double r74946 = sqrt(r74945);
double r74947 = atan2(r74943, r74946);
double r74948 = r74925 * r74947;
double r74949 = r74924 * r74948;
return r74949;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r74950 = R;
double r74951 = 2.0;
double r74952 = phi1;
double r74953 = r74952 / r74951;
double r74954 = sin(r74953);
double r74955 = phi2;
double r74956 = r74955 / r74951;
double r74957 = cos(r74956);
double r74958 = r74954 * r74957;
double r74959 = cos(r74953);
double r74960 = sin(r74956);
double r74961 = r74959 * r74960;
double r74962 = r74958 - r74961;
double r74963 = pow(r74962, r74951);
double r74964 = cos(r74952);
double r74965 = cos(r74955);
double r74966 = r74964 * r74965;
double r74967 = lambda1;
double r74968 = lambda2;
double r74969 = r74967 - r74968;
double r74970 = r74969 / r74951;
double r74971 = sin(r74970);
double r74972 = r74966 * r74971;
double r74973 = r74972 * r74971;
double r74974 = r74963 + r74973;
double r74975 = sqrt(r74974);
double r74976 = 1.0;
double r74977 = 3.0;
double r74978 = pow(r74971, r74977);
double r74979 = cbrt(r74978);
double r74980 = r74966 * r74979;
double r74981 = r74980 * r74971;
double r74982 = r74963 + r74981;
double r74983 = r74976 - r74982;
double r74984 = sqrt(r74983);
double r74985 = atan2(r74975, r74984);
double r74986 = r74951 * r74985;
double r74987 = r74950 * r74986;
return r74987;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.3
rmApplied div-sub24.3
Applied sin-diff23.7
rmApplied div-sub23.7
Applied sin-diff14.0
rmApplied add-cbrt-cube14.0
Simplified14.0
Final simplification14.0
herbie shell --seed 2020042
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
:precision binary64
(* R (* 2 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))) (sqrt (- 1 (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))))))))