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}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\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}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\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 \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)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r68788 = R;
double r68789 = 2.0;
double r68790 = phi1;
double r68791 = phi2;
double r68792 = r68790 - r68791;
double r68793 = r68792 / r68789;
double r68794 = sin(r68793);
double r68795 = pow(r68794, r68789);
double r68796 = cos(r68790);
double r68797 = cos(r68791);
double r68798 = r68796 * r68797;
double r68799 = lambda1;
double r68800 = lambda2;
double r68801 = r68799 - r68800;
double r68802 = r68801 / r68789;
double r68803 = sin(r68802);
double r68804 = r68798 * r68803;
double r68805 = r68804 * r68803;
double r68806 = r68795 + r68805;
double r68807 = sqrt(r68806);
double r68808 = 1.0;
double r68809 = r68808 - r68806;
double r68810 = sqrt(r68809);
double r68811 = atan2(r68807, r68810);
double r68812 = r68789 * r68811;
double r68813 = r68788 * r68812;
return r68813;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r68814 = R;
double r68815 = 2.0;
double r68816 = phi1;
double r68817 = r68816 / r68815;
double r68818 = sin(r68817);
double r68819 = phi2;
double r68820 = r68819 / r68815;
double r68821 = cos(r68820);
double r68822 = r68818 * r68821;
double r68823 = cos(r68817);
double r68824 = sin(r68820);
double r68825 = r68823 * r68824;
double r68826 = r68822 - r68825;
double r68827 = pow(r68826, r68815);
double r68828 = cos(r68816);
double r68829 = cos(r68819);
double r68830 = r68828 * r68829;
double r68831 = lambda1;
double r68832 = lambda2;
double r68833 = r68831 - r68832;
double r68834 = r68833 / r68815;
double r68835 = sin(r68834);
double r68836 = r68830 * r68835;
double r68837 = r68836 * r68835;
double r68838 = r68827 + r68837;
double r68839 = sqrt(r68838);
double r68840 = 1.0;
double r68841 = cbrt(r68835);
double r68842 = r68835 * r68835;
double r68843 = cbrt(r68842);
double r68844 = r68841 * r68843;
double r68845 = r68836 * r68844;
double r68846 = r68827 + r68845;
double r68847 = r68840 - r68846;
double r68848 = sqrt(r68847);
double r68849 = atan2(r68839, r68848);
double r68850 = r68815 * r68849;
double r68851 = r68814 * r68850;
return r68851;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.6
rmApplied div-sub24.6
Applied sin-diff24.0
rmApplied div-sub24.0
Applied sin-diff14.0
rmApplied add-cbrt-cube14.0
Simplified14.0
rmApplied cube-mult14.0
Applied cbrt-prod14.0
Final simplification14.0
herbie shell --seed 2019291
(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))))))))))