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 - \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 \sqrt[3]{{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{3}}\right) \cdot \left({\left(\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)}^{2} \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 r69918 = R;
double r69919 = 2.0;
double r69920 = phi1;
double r69921 = phi2;
double r69922 = r69920 - r69921;
double r69923 = r69922 / r69919;
double r69924 = sin(r69923);
double r69925 = pow(r69924, r69919);
double r69926 = cos(r69920);
double r69927 = cos(r69921);
double r69928 = r69926 * r69927;
double r69929 = lambda1;
double r69930 = lambda2;
double r69931 = r69929 - r69930;
double r69932 = r69931 / r69919;
double r69933 = sin(r69932);
double r69934 = r69928 * r69933;
double r69935 = r69934 * r69933;
double r69936 = r69925 + r69935;
double r69937 = sqrt(r69936);
double r69938 = 1.0;
double r69939 = r69938 - r69936;
double r69940 = sqrt(r69939);
double r69941 = atan2(r69937, r69940);
double r69942 = r69919 * r69941;
double r69943 = r69918 * r69942;
return r69943;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r69944 = R;
double r69945 = 2.0;
double r69946 = phi1;
double r69947 = phi2;
double r69948 = r69946 - r69947;
double r69949 = r69948 / r69945;
double r69950 = sin(r69949);
double r69951 = pow(r69950, r69945);
double r69952 = cos(r69946);
double r69953 = cos(r69947);
double r69954 = r69952 * r69953;
double r69955 = lambda1;
double r69956 = lambda2;
double r69957 = r69955 - r69956;
double r69958 = r69957 / r69945;
double r69959 = sin(r69958);
double r69960 = r69954 * r69959;
double r69961 = r69960 * r69959;
double r69962 = r69951 + r69961;
double r69963 = sqrt(r69962);
double r69964 = 1.0;
double r69965 = 3.0;
double r69966 = pow(r69959, r69965);
double r69967 = cbrt(r69966);
double r69968 = r69954 * r69967;
double r69969 = cbrt(r69959);
double r69970 = 2.0;
double r69971 = pow(r69969, r69970);
double r69972 = r69971 * r69969;
double r69973 = r69968 * r69972;
double r69974 = r69951 + r69973;
double r69975 = r69964 - r69974;
double r69976 = sqrt(r69975);
double r69977 = atan2(r69963, r69976);
double r69978 = r69945 * r69977;
double r69979 = r69944 * r69978;
return r69979;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 23.9
rmApplied add-cbrt-cube24.0
Simplified24.0
rmApplied add-cube-cbrt24.0
Simplified24.0
Final simplification24.0
herbie shell --seed 2019325
(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))))))))))