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 r3603731 = R;
double r3603732 = 2.0;
double r3603733 = phi1;
double r3603734 = phi2;
double r3603735 = r3603733 - r3603734;
double r3603736 = r3603735 / r3603732;
double r3603737 = sin(r3603736);
double r3603738 = pow(r3603737, r3603732);
double r3603739 = cos(r3603733);
double r3603740 = cos(r3603734);
double r3603741 = r3603739 * r3603740;
double r3603742 = lambda1;
double r3603743 = lambda2;
double r3603744 = r3603742 - r3603743;
double r3603745 = r3603744 / r3603732;
double r3603746 = sin(r3603745);
double r3603747 = r3603741 * r3603746;
double r3603748 = r3603747 * r3603746;
double r3603749 = r3603738 + r3603748;
double r3603750 = sqrt(r3603749);
double r3603751 = 1.0;
double r3603752 = r3603751 - r3603749;
double r3603753 = sqrt(r3603752);
double r3603754 = atan2(r3603750, r3603753);
double r3603755 = r3603732 * r3603754;
double r3603756 = r3603731 * r3603755;
return r3603756;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3603757 = R;
double r3603758 = 2.0;
double r3603759 = phi2;
double r3603760 = r3603759 / r3603758;
double r3603761 = cos(r3603760);
double r3603762 = phi1;
double r3603763 = r3603762 / r3603758;
double r3603764 = sin(r3603763);
double r3603765 = r3603761 * r3603764;
double r3603766 = cos(r3603763);
double r3603767 = sin(r3603760);
double r3603768 = r3603766 * r3603767;
double r3603769 = r3603765 - r3603768;
double r3603770 = pow(r3603769, r3603758);
double r3603771 = lambda1;
double r3603772 = lambda2;
double r3603773 = r3603771 - r3603772;
double r3603774 = r3603773 / r3603758;
double r3603775 = sin(r3603774);
double r3603776 = cos(r3603759);
double r3603777 = cos(r3603762);
double r3603778 = r3603776 * r3603777;
double r3603779 = r3603778 * r3603775;
double r3603780 = r3603775 * r3603779;
double r3603781 = r3603770 + r3603780;
double r3603782 = sqrt(r3603781);
double r3603783 = 1.0;
double r3603784 = r3603783 - r3603781;
double r3603785 = sqrt(r3603784);
double r3603786 = atan2(r3603782, r3603785);
double r3603787 = r3603758 * r3603786;
double r3603788 = r3603757 * r3603787;
return r3603788;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.1
rmApplied div-sub24.1
Applied sin-diff23.5
rmApplied div-sub23.5
Applied sin-diff13.5
Final simplification13.5
herbie shell --seed 2019164
(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))))))))))