\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(\log \left(e^{\sin \phi_1 \cdot \sin \phi_2}\right) + \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 r21760 = phi1;
double r21761 = sin(r21760);
double r21762 = phi2;
double r21763 = sin(r21762);
double r21764 = r21761 * r21763;
double r21765 = cos(r21760);
double r21766 = cos(r21762);
double r21767 = r21765 * r21766;
double r21768 = lambda1;
double r21769 = lambda2;
double r21770 = r21768 - r21769;
double r21771 = cos(r21770);
double r21772 = r21767 * r21771;
double r21773 = r21764 + r21772;
double r21774 = acos(r21773);
double r21775 = R;
double r21776 = r21774 * r21775;
return r21776;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r21777 = phi1;
double r21778 = sin(r21777);
double r21779 = phi2;
double r21780 = sin(r21779);
double r21781 = r21778 * r21780;
double r21782 = exp(r21781);
double r21783 = log(r21782);
double r21784 = cos(r21777);
double r21785 = cos(r21779);
double r21786 = r21784 * r21785;
double r21787 = lambda1;
double r21788 = cos(r21787);
double r21789 = lambda2;
double r21790 = cos(r21789);
double r21791 = r21788 * r21790;
double r21792 = sin(r21787);
double r21793 = sin(r21789);
double r21794 = r21792 * r21793;
double r21795 = r21791 + r21794;
double r21796 = r21786 * r21795;
double r21797 = r21783 + r21796;
double r21798 = acos(r21797);
double r21799 = R;
double r21800 = r21798 * r21799;
return r21800;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.7
rmApplied cos-diff3.8
rmApplied add-log-exp3.8
Final simplification3.8
herbie shell --seed 2020003 +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))