\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\mathsf{log1p}\left(\log \left(e^{\mathsf{expm1}\left(\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_1, \cos \phi_2, \sin \phi_1 \cdot \sin \phi_2\right)\right)\right)}\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r22857 = phi1;
double r22858 = sin(r22857);
double r22859 = phi2;
double r22860 = sin(r22859);
double r22861 = r22858 * r22860;
double r22862 = cos(r22857);
double r22863 = cos(r22859);
double r22864 = r22862 * r22863;
double r22865 = lambda1;
double r22866 = lambda2;
double r22867 = r22865 - r22866;
double r22868 = cos(r22867);
double r22869 = r22864 * r22868;
double r22870 = r22861 + r22869;
double r22871 = acos(r22870);
double r22872 = R;
double r22873 = r22871 * r22872;
return r22873;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r22874 = lambda2;
double r22875 = cos(r22874);
double r22876 = lambda1;
double r22877 = cos(r22876);
double r22878 = sin(r22876);
double r22879 = sin(r22874);
double r22880 = r22878 * r22879;
double r22881 = fma(r22875, r22877, r22880);
double r22882 = phi1;
double r22883 = cos(r22882);
double r22884 = r22881 * r22883;
double r22885 = phi2;
double r22886 = cos(r22885);
double r22887 = sin(r22882);
double r22888 = sin(r22885);
double r22889 = r22887 * r22888;
double r22890 = fma(r22884, r22886, r22889);
double r22891 = acos(r22890);
double r22892 = expm1(r22891);
double r22893 = exp(r22892);
double r22894 = log(r22893);
double r22895 = log1p(r22894);
double r22896 = R;
double r22897 = r22895 * r22896;
return r22897;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 16.9
rmApplied sub-neg16.9
Applied cos-sum3.8
Simplified3.8
rmApplied add-cbrt-cube3.8
Applied add-cbrt-cube3.8
Applied cbrt-unprod3.8
Simplified3.8
rmApplied log1p-expm1-u3.8
Simplified3.8
rmApplied add-log-exp3.8
Final simplification3.8
herbie shell --seed 2019305 +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))