\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(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r28815 = phi1;
double r28816 = sin(r28815);
double r28817 = phi2;
double r28818 = sin(r28817);
double r28819 = r28816 * r28818;
double r28820 = cos(r28815);
double r28821 = cos(r28817);
double r28822 = r28820 * r28821;
double r28823 = lambda1;
double r28824 = lambda2;
double r28825 = r28823 - r28824;
double r28826 = cos(r28825);
double r28827 = r28822 * r28826;
double r28828 = r28819 + r28827;
double r28829 = acos(r28828);
double r28830 = R;
double r28831 = r28829 * r28830;
return r28831;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r28832 = phi1;
double r28833 = sin(r28832);
double r28834 = phi2;
double r28835 = sin(r28834);
double r28836 = r28833 * r28835;
double r28837 = cos(r28832);
double r28838 = cos(r28834);
double r28839 = r28837 * r28838;
double r28840 = lambda1;
double r28841 = cos(r28840);
double r28842 = lambda2;
double r28843 = cos(r28842);
double r28844 = r28841 * r28843;
double r28845 = r28839 * r28844;
double r28846 = sin(r28840);
double r28847 = sin(r28842);
double r28848 = r28846 * r28847;
double r28849 = r28839 * r28848;
double r28850 = r28845 + r28849;
double r28851 = r28836 + r28850;
double r28852 = acos(r28851);
double r28853 = R;
double r28854 = r28852 * r28853;
return r28854;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.0
rmApplied cos-diff3.9
Applied distribute-lft-in3.9
Final simplification3.9
herbie shell --seed 2020043
(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))