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(\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)\right)}^{3}}\right) \cdot \log \left(e^{\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 r95921 = R;
double r95922 = 2.0;
double r95923 = phi1;
double r95924 = phi2;
double r95925 = r95923 - r95924;
double r95926 = r95925 / r95922;
double r95927 = sin(r95926);
double r95928 = pow(r95927, r95922);
double r95929 = cos(r95923);
double r95930 = cos(r95924);
double r95931 = r95929 * r95930;
double r95932 = lambda1;
double r95933 = lambda2;
double r95934 = r95932 - r95933;
double r95935 = r95934 / r95922;
double r95936 = sin(r95935);
double r95937 = r95931 * r95936;
double r95938 = r95937 * r95936;
double r95939 = r95928 + r95938;
double r95940 = sqrt(r95939);
double r95941 = 1.0;
double r95942 = r95941 - r95939;
double r95943 = sqrt(r95942);
double r95944 = atan2(r95940, r95943);
double r95945 = r95922 * r95944;
double r95946 = r95921 * r95945;
return r95946;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r95947 = R;
double r95948 = 2.0;
double r95949 = phi1;
double r95950 = phi2;
double r95951 = r95949 - r95950;
double r95952 = r95951 / r95948;
double r95953 = sin(r95952);
double r95954 = pow(r95953, r95948);
double r95955 = cos(r95949);
double r95956 = cos(r95950);
double r95957 = r95955 * r95956;
double r95958 = lambda1;
double r95959 = lambda2;
double r95960 = r95958 - r95959;
double r95961 = r95960 / r95948;
double r95962 = sin(r95961);
double r95963 = r95957 * r95962;
double r95964 = r95963 * r95962;
double r95965 = r95954 + r95964;
double r95966 = sqrt(r95965);
double r95967 = 1.0;
double r95968 = exp(r95962);
double r95969 = log(r95968);
double r95970 = 3.0;
double r95971 = pow(r95969, r95970);
double r95972 = cbrt(r95971);
double r95973 = r95957 * r95972;
double r95974 = r95973 * r95969;
double r95975 = r95954 + r95974;
double r95976 = r95967 - r95975;
double r95977 = sqrt(r95976);
double r95978 = atan2(r95966, r95977);
double r95979 = r95948 * r95978;
double r95980 = r95947 * r95979;
return r95980;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.8
rmApplied add-log-exp24.8
rmApplied add-cbrt-cube24.8
Simplified24.8
rmApplied add-log-exp24.8
Final simplification24.8
herbie shell --seed 2020060
(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))))))))))