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(\cos \left(\frac{\phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}{\sqrt{1 - \left({\left(\cos \left(\frac{\phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \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 r948947 = R;
double r948948 = 2.0;
double r948949 = phi1;
double r948950 = phi2;
double r948951 = r948949 - r948950;
double r948952 = r948951 / r948948;
double r948953 = sin(r948952);
double r948954 = pow(r948953, r948948);
double r948955 = cos(r948949);
double r948956 = cos(r948950);
double r948957 = r948955 * r948956;
double r948958 = lambda1;
double r948959 = lambda2;
double r948960 = r948958 - r948959;
double r948961 = r948960 / r948948;
double r948962 = sin(r948961);
double r948963 = r948957 * r948962;
double r948964 = r948963 * r948962;
double r948965 = r948954 + r948964;
double r948966 = sqrt(r948965);
double r948967 = 1.0;
double r948968 = r948967 - r948965;
double r948969 = sqrt(r948968);
double r948970 = atan2(r948966, r948969);
double r948971 = r948948 * r948970;
double r948972 = r948947 * r948971;
return r948972;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r948973 = R;
double r948974 = 2.0;
double r948975 = phi2;
double r948976 = r948975 / r948974;
double r948977 = cos(r948976);
double r948978 = phi1;
double r948979 = r948978 / r948974;
double r948980 = sin(r948979);
double r948981 = r948977 * r948980;
double r948982 = cos(r948979);
double r948983 = sin(r948976);
double r948984 = r948982 * r948983;
double r948985 = r948981 - r948984;
double r948986 = pow(r948985, r948974);
double r948987 = lambda1;
double r948988 = lambda2;
double r948989 = r948987 - r948988;
double r948990 = r948989 / r948974;
double r948991 = sin(r948990);
double r948992 = cos(r948975);
double r948993 = cos(r948978);
double r948994 = r948992 * r948993;
double r948995 = r948994 * r948991;
double r948996 = r948991 * r948995;
double r948997 = r948986 + r948996;
double r948998 = sqrt(r948997);
double r948999 = 1.0;
double r949000 = r948999 - r948997;
double r949001 = sqrt(r949000);
double r949002 = atan2(r948998, r949001);
double r949003 = r948974 * r949002;
double r949004 = r948973 * r949003;
return r949004;
}



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.7
rmApplied div-sub23.7
Applied sin-diff13.9
Final simplification13.9
herbie shell --seed 2019154
(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))))))))))