\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r27770 = phi1;
double r27771 = sin(r27770);
double r27772 = phi2;
double r27773 = sin(r27772);
double r27774 = r27771 * r27773;
double r27775 = cos(r27770);
double r27776 = cos(r27772);
double r27777 = r27775 * r27776;
double r27778 = lambda1;
double r27779 = lambda2;
double r27780 = r27778 - r27779;
double r27781 = cos(r27780);
double r27782 = r27777 * r27781;
double r27783 = r27774 + r27782;
double r27784 = acos(r27783);
double r27785 = R;
double r27786 = r27784 * r27785;
return r27786;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r27787 = phi1;
double r27788 = sin(r27787);
double r27789 = phi2;
double r27790 = sin(r27789);
double r27791 = r27788 * r27790;
double r27792 = cos(r27787);
double r27793 = cos(r27789);
double r27794 = r27792 * r27793;
double r27795 = lambda1;
double r27796 = cos(r27795);
double r27797 = lambda2;
double r27798 = cos(r27797);
double r27799 = r27796 * r27798;
double r27800 = sin(r27795);
double r27801 = sin(r27797);
double r27802 = r27800 * r27801;
double r27803 = r27799 + r27802;
double r27804 = r27794 * r27803;
double r27805 = r27791 + r27804;
double r27806 = acos(r27805);
double r27807 = R;
double r27808 = r27806 * r27807;
return r27808;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.2
rmApplied cos-diff4.0
Final simplification4.0
herbie shell --seed 2020001 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Spherical law of cosines"
:precision binary64
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))