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{\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) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}}}{\sqrt{1 - \left(\log \left(e^{\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\sin \left(\frac{\lambda_1 - \lambda_2}{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) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3981745 = R;
double r3981746 = 2.0;
double r3981747 = phi1;
double r3981748 = phi2;
double r3981749 = r3981747 - r3981748;
double r3981750 = r3981749 / r3981746;
double r3981751 = sin(r3981750);
double r3981752 = pow(r3981751, r3981746);
double r3981753 = cos(r3981747);
double r3981754 = cos(r3981748);
double r3981755 = r3981753 * r3981754;
double r3981756 = lambda1;
double r3981757 = lambda2;
double r3981758 = r3981756 - r3981757;
double r3981759 = r3981758 / r3981746;
double r3981760 = sin(r3981759);
double r3981761 = r3981755 * r3981760;
double r3981762 = r3981761 * r3981760;
double r3981763 = r3981752 + r3981762;
double r3981764 = sqrt(r3981763);
double r3981765 = 1.0;
double r3981766 = r3981765 - r3981763;
double r3981767 = sqrt(r3981766);
double r3981768 = atan2(r3981764, r3981767);
double r3981769 = r3981746 * r3981768;
double r3981770 = r3981745 * r3981769;
return r3981770;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3981771 = R;
double r3981772 = 2.0;
double r3981773 = lambda1;
double r3981774 = lambda2;
double r3981775 = r3981773 - r3981774;
double r3981776 = r3981775 / r3981772;
double r3981777 = sin(r3981776);
double r3981778 = phi2;
double r3981779 = cos(r3981778);
double r3981780 = phi1;
double r3981781 = cos(r3981780);
double r3981782 = r3981779 * r3981781;
double r3981783 = r3981782 * r3981777;
double r3981784 = r3981777 * r3981783;
double r3981785 = r3981780 - r3981778;
double r3981786 = r3981785 / r3981772;
double r3981787 = sin(r3981786);
double r3981788 = pow(r3981787, r3981772);
double r3981789 = r3981784 + r3981788;
double r3981790 = sqrt(r3981789);
double r3981791 = 1.0;
double r3981792 = r3981777 * r3981777;
double r3981793 = r3981777 * r3981792;
double r3981794 = cbrt(r3981793);
double r3981795 = r3981794 * r3981777;
double r3981796 = r3981777 * r3981795;
double r3981797 = cbrt(r3981796);
double r3981798 = exp(r3981797);
double r3981799 = log(r3981798);
double r3981800 = r3981799 * r3981783;
double r3981801 = r3981800 + r3981788;
double r3981802 = r3981791 - r3981801;
double r3981803 = sqrt(r3981802);
double r3981804 = atan2(r3981790, r3981803);
double r3981805 = r3981772 * r3981804;
double r3981806 = r3981771 * r3981805;
return r3981806;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.5
rmApplied add-log-exp24.5
rmApplied add-cbrt-cube24.5
rmApplied add-cbrt-cube24.5
Final simplification24.5
herbie shell --seed 2019172
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* R (* 2.0 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))) (sqrt (- 1.0 (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))))))))