\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(\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 + \log \left(e^{\sin \lambda_1 \cdot \sin \lambda_2}\right)\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r25883 = phi1;
double r25884 = sin(r25883);
double r25885 = phi2;
double r25886 = sin(r25885);
double r25887 = r25884 * r25886;
double r25888 = cos(r25883);
double r25889 = cos(r25885);
double r25890 = r25888 * r25889;
double r25891 = lambda1;
double r25892 = lambda2;
double r25893 = r25891 - r25892;
double r25894 = cos(r25893);
double r25895 = r25890 * r25894;
double r25896 = r25887 + r25895;
double r25897 = acos(r25896);
double r25898 = R;
double r25899 = r25897 * r25898;
return r25899;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r25900 = phi1;
double r25901 = sin(r25900);
double r25902 = phi2;
double r25903 = sin(r25902);
double r25904 = r25901 * r25903;
double r25905 = cos(r25900);
double r25906 = cos(r25902);
double r25907 = r25905 * r25906;
double r25908 = lambda1;
double r25909 = cos(r25908);
double r25910 = lambda2;
double r25911 = cos(r25910);
double r25912 = r25909 * r25911;
double r25913 = sin(r25908);
double r25914 = sin(r25910);
double r25915 = r25913 * r25914;
double r25916 = exp(r25915);
double r25917 = log(r25916);
double r25918 = r25912 + r25917;
double r25919 = r25907 * r25918;
double r25920 = r25904 + r25919;
double r25921 = acos(r25920);
double r25922 = R;
double r25923 = r25921 * r25922;
return r25923;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.2
rmApplied cos-diff3.9
rmApplied add-log-exp3.9
Final simplification3.9
herbie shell --seed 2020060
(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))