\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\log \left(e^{e^{\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)}}\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r25851 = phi1;
double r25852 = sin(r25851);
double r25853 = phi2;
double r25854 = sin(r25853);
double r25855 = r25852 * r25854;
double r25856 = cos(r25851);
double r25857 = cos(r25853);
double r25858 = r25856 * r25857;
double r25859 = lambda1;
double r25860 = lambda2;
double r25861 = r25859 - r25860;
double r25862 = cos(r25861);
double r25863 = r25858 * r25862;
double r25864 = r25855 + r25863;
double r25865 = acos(r25864);
double r25866 = R;
double r25867 = r25865 * r25866;
return r25867;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r25868 = phi1;
double r25869 = sin(r25868);
double r25870 = phi2;
double r25871 = sin(r25870);
double r25872 = r25869 * r25871;
double r25873 = cos(r25868);
double r25874 = cos(r25870);
double r25875 = r25873 * r25874;
double r25876 = lambda1;
double r25877 = cos(r25876);
double r25878 = lambda2;
double r25879 = cos(r25878);
double r25880 = r25877 * r25879;
double r25881 = sin(r25876);
double r25882 = -r25878;
double r25883 = sin(r25882);
double r25884 = r25881 * r25883;
double r25885 = r25880 - r25884;
double r25886 = r25875 * r25885;
double r25887 = r25872 + r25886;
double r25888 = acos(r25887);
double r25889 = log(r25888);
double r25890 = expm1(r25889);
double r25891 = log1p(r25890);
double r25892 = exp(r25891);
double r25893 = exp(r25892);
double r25894 = log(r25893);
double r25895 = R;
double r25896 = r25894 * r25895;
return r25896;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.1
rmApplied sub-neg17.1
Applied cos-sum3.8
Simplified3.8
rmApplied add-log-exp3.8
rmApplied add-exp-log3.8
rmApplied log1p-expm1-u3.8
Final simplification3.8
herbie shell --seed 2020064 +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))