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 \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \left(\left(\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r69934 = R;
double r69935 = 2.0;
double r69936 = phi1;
double r69937 = phi2;
double r69938 = r69936 - r69937;
double r69939 = r69938 / r69935;
double r69940 = sin(r69939);
double r69941 = pow(r69940, r69935);
double r69942 = cos(r69936);
double r69943 = cos(r69937);
double r69944 = r69942 * r69943;
double r69945 = lambda1;
double r69946 = lambda2;
double r69947 = r69945 - r69946;
double r69948 = r69947 / r69935;
double r69949 = sin(r69948);
double r69950 = r69944 * r69949;
double r69951 = r69950 * r69949;
double r69952 = r69941 + r69951;
double r69953 = sqrt(r69952);
double r69954 = 1.0;
double r69955 = r69954 - r69952;
double r69956 = sqrt(r69955);
double r69957 = atan2(r69953, r69956);
double r69958 = r69935 * r69957;
double r69959 = r69934 * r69958;
return r69959;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r69960 = R;
double r69961 = 2.0;
double r69962 = phi1;
double r69963 = r69962 / r69961;
double r69964 = sin(r69963);
double r69965 = phi2;
double r69966 = r69965 / r69961;
double r69967 = cos(r69966);
double r69968 = r69964 * r69967;
double r69969 = cos(r69963);
double r69970 = sin(r69966);
double r69971 = r69969 * r69970;
double r69972 = r69968 - r69971;
double r69973 = pow(r69972, r69961);
double r69974 = cos(r69962);
double r69975 = cos(r69965);
double r69976 = r69974 * r69975;
double r69977 = lambda1;
double r69978 = lambda2;
double r69979 = r69977 - r69978;
double r69980 = r69979 / r69961;
double r69981 = sin(r69980);
double r69982 = r69976 * r69981;
double r69983 = r69982 * r69981;
double r69984 = r69973 + r69983;
double r69985 = sqrt(r69984);
double r69986 = 1.0;
double r69987 = cbrt(r69981);
double r69988 = r69987 * r69987;
double r69989 = r69988 * r69987;
double r69990 = r69982 * r69989;
double r69991 = r69973 + r69990;
double r69992 = r69986 - r69991;
double r69993 = sqrt(r69992);
double r69994 = atan2(r69985, r69993);
double r69995 = r69961 * r69994;
double r69996 = r69960 * r69995;
return r69996;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.2
rmApplied div-sub24.2
Applied sin-diff23.6
rmApplied div-sub23.6
Applied sin-diff13.9
rmApplied add-cube-cbrt14.0
Final simplification14.0
herbie shell --seed 2019208
(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))))))))))