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)2 \cdot \left(R \cdot \tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right) + \left(\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \cos \phi_1\right) \cdot \left(\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1471932 = R;
double r1471933 = 2.0;
double r1471934 = phi1;
double r1471935 = phi2;
double r1471936 = r1471934 - r1471935;
double r1471937 = r1471936 / r1471933;
double r1471938 = sin(r1471937);
double r1471939 = pow(r1471938, r1471933);
double r1471940 = cos(r1471934);
double r1471941 = cos(r1471935);
double r1471942 = r1471940 * r1471941;
double r1471943 = lambda1;
double r1471944 = lambda2;
double r1471945 = r1471943 - r1471944;
double r1471946 = r1471945 / r1471933;
double r1471947 = sin(r1471946);
double r1471948 = r1471942 * r1471947;
double r1471949 = r1471948 * r1471947;
double r1471950 = r1471939 + r1471949;
double r1471951 = sqrt(r1471950);
double r1471952 = 1.0;
double r1471953 = r1471952 - r1471950;
double r1471954 = sqrt(r1471953);
double r1471955 = atan2(r1471951, r1471954);
double r1471956 = r1471933 * r1471955;
double r1471957 = r1471932 * r1471956;
return r1471957;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1471958 = 2.0;
double r1471959 = R;
double r1471960 = phi1;
double r1471961 = phi2;
double r1471962 = r1471960 - r1471961;
double r1471963 = r1471962 / r1471958;
double r1471964 = sin(r1471963);
double r1471965 = r1471964 * r1471964;
double r1471966 = cos(r1471961);
double r1471967 = lambda1;
double r1471968 = lambda2;
double r1471969 = r1471967 - r1471968;
double r1471970 = r1471969 / r1471958;
double r1471971 = sin(r1471970);
double r1471972 = r1471966 * r1471971;
double r1471973 = cos(r1471960);
double r1471974 = r1471972 * r1471973;
double r1471975 = cbrt(r1471971);
double r1471976 = r1471971 * r1471971;
double r1471977 = cbrt(r1471976);
double r1471978 = r1471975 * r1471977;
double r1471979 = r1471974 * r1471978;
double r1471980 = r1471965 + r1471979;
double r1471981 = sqrt(r1471980);
double r1471982 = cos(r1471963);
double r1471983 = r1471982 * r1471982;
double r1471984 = r1471974 * r1471971;
double r1471985 = r1471983 - r1471984;
double r1471986 = sqrt(r1471985);
double r1471987 = atan2(r1471981, r1471986);
double r1471988 = r1471959 * r1471987;
double r1471989 = r1471958 * r1471988;
return r1471989;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.0
Simplified24.0
rmApplied add-cbrt-cube24.2
rmApplied cbrt-prod24.0
Final simplification24.0
herbie shell --seed 2019153
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* 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))))))))))