\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 Re^{\mathsf{log1p}\left(\mathsf{expm1}\left(\log \left(\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 \left(-\lambda_2\right)\right)\right)\right)\right)\right)} \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r25842 = phi1;
double r25843 = sin(r25842);
double r25844 = phi2;
double r25845 = sin(r25844);
double r25846 = r25843 * r25845;
double r25847 = cos(r25842);
double r25848 = cos(r25844);
double r25849 = r25847 * r25848;
double r25850 = lambda1;
double r25851 = lambda2;
double r25852 = r25850 - r25851;
double r25853 = cos(r25852);
double r25854 = r25849 * r25853;
double r25855 = r25846 + r25854;
double r25856 = acos(r25855);
double r25857 = R;
double r25858 = r25856 * r25857;
return r25858;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r25859 = phi1;
double r25860 = sin(r25859);
double r25861 = phi2;
double r25862 = sin(r25861);
double r25863 = r25860 * r25862;
double r25864 = cos(r25859);
double r25865 = cos(r25861);
double r25866 = r25864 * r25865;
double r25867 = lambda1;
double r25868 = cos(r25867);
double r25869 = lambda2;
double r25870 = cos(r25869);
double r25871 = r25868 * r25870;
double r25872 = sin(r25867);
double r25873 = -r25869;
double r25874 = sin(r25873);
double r25875 = r25872 * r25874;
double r25876 = r25871 - r25875;
double r25877 = r25866 * r25876;
double r25878 = r25863 + r25877;
double r25879 = acos(r25878);
double r25880 = log(r25879);
double r25881 = expm1(r25880);
double r25882 = log1p(r25881);
double r25883 = exp(r25882);
double r25884 = R;
double r25885 = r25883 * r25884;
return r25885;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.9
rmApplied sub-neg16.9
Applied cos-sum3.9
Simplified3.9
rmApplied add-exp-log3.9
rmApplied log1p-expm1-u3.9
Final simplification3.9
herbie shell --seed 2020083 +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))