\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\left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right), \cos \phi_1 \cdot \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23834 = phi1;
double r23835 = sin(r23834);
double r23836 = phi2;
double r23837 = sin(r23836);
double r23838 = r23835 * r23837;
double r23839 = cos(r23834);
double r23840 = cos(r23836);
double r23841 = r23839 * r23840;
double r23842 = lambda1;
double r23843 = lambda2;
double r23844 = r23842 - r23843;
double r23845 = cos(r23844);
double r23846 = r23841 * r23845;
double r23847 = r23838 + r23846;
double r23848 = acos(r23847);
double r23849 = R;
double r23850 = r23848 * r23849;
return r23850;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23851 = atan2(1.0, 0.0);
double r23852 = 2.0;
double r23853 = r23851 / r23852;
double r23854 = lambda1;
double r23855 = cos(r23854);
double r23856 = lambda2;
double r23857 = cos(r23856);
double r23858 = sin(r23854);
double r23859 = sin(r23856);
double r23860 = r23858 * r23859;
double r23861 = fma(r23855, r23857, r23860);
double r23862 = phi1;
double r23863 = cos(r23862);
double r23864 = phi2;
double r23865 = cos(r23864);
double r23866 = r23863 * r23865;
double r23867 = sin(r23862);
double r23868 = sin(r23864);
double r23869 = r23867 * r23868;
double r23870 = fma(r23861, r23866, r23869);
double r23871 = asin(r23870);
double r23872 = r23853 - r23871;
double r23873 = R;
double r23874 = r23872 * r23873;
return r23874;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 16.5
rmApplied sub-neg16.5
Applied cos-sum3.6
Simplified3.6
rmApplied acos-asin3.6
Simplified3.6
Final simplification3.6
herbie shell --seed 2019303 +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))