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 r57867 = R;
double r57868 = 2.0;
double r57869 = phi1;
double r57870 = phi2;
double r57871 = r57869 - r57870;
double r57872 = r57871 / r57868;
double r57873 = sin(r57872);
double r57874 = pow(r57873, r57868);
double r57875 = cos(r57869);
double r57876 = cos(r57870);
double r57877 = r57875 * r57876;
double r57878 = lambda1;
double r57879 = lambda2;
double r57880 = r57878 - r57879;
double r57881 = r57880 / r57868;
double r57882 = sin(r57881);
double r57883 = r57877 * r57882;
double r57884 = r57883 * r57882;
double r57885 = r57874 + r57884;
double r57886 = sqrt(r57885);
double r57887 = 1.0;
double r57888 = r57887 - r57885;
double r57889 = sqrt(r57888);
double r57890 = atan2(r57886, r57889);
double r57891 = r57868 * r57890;
double r57892 = r57867 * r57891;
return r57892;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r57893 = R;
double r57894 = 2.0;
double r57895 = phi1;
double r57896 = phi2;
double r57897 = r57895 - r57896;
double r57898 = r57897 / r57894;
double r57899 = sin(r57898);
double r57900 = pow(r57899, r57894);
double r57901 = cos(r57895);
double r57902 = cos(r57896);
double r57903 = r57901 * r57902;
double r57904 = lambda1;
double r57905 = lambda2;
double r57906 = r57904 - r57905;
double r57907 = r57906 / r57894;
double r57908 = sin(r57907);
double r57909 = r57903 * r57908;
double r57910 = r57909 * r57908;
double r57911 = r57900 + r57910;
double r57912 = sqrt(r57911);
double r57913 = 1.0;
double r57914 = 3.0;
double r57915 = pow(r57908, r57914);
double r57916 = cbrt(r57915);
double r57917 = r57903 * r57916;
double r57918 = cbrt(r57908);
double r57919 = 2.0;
double r57920 = pow(r57918, r57919);
double r57921 = r57920 * r57918;
double r57922 = r57917 * r57921;
double r57923 = r57900 + r57922;
double r57924 = r57913 - r57923;
double r57925 = sqrt(r57924);
double r57926 = atan2(r57912, r57925);
double r57927 = r57894 * r57926;
double r57928 = r57893 * r57927;
return r57928;
}



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))))))))))