\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(\log \left(e^{\sin \phi_1 \cdot \sin \phi_2}\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23987 = phi1;
double r23988 = sin(r23987);
double r23989 = phi2;
double r23990 = sin(r23989);
double r23991 = r23988 * r23990;
double r23992 = cos(r23987);
double r23993 = cos(r23989);
double r23994 = r23992 * r23993;
double r23995 = lambda1;
double r23996 = lambda2;
double r23997 = r23995 - r23996;
double r23998 = cos(r23997);
double r23999 = r23994 * r23998;
double r24000 = r23991 + r23999;
double r24001 = acos(r24000);
double r24002 = R;
double r24003 = r24001 * r24002;
return r24003;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r24004 = phi1;
double r24005 = sin(r24004);
double r24006 = phi2;
double r24007 = sin(r24006);
double r24008 = r24005 * r24007;
double r24009 = exp(r24008);
double r24010 = log(r24009);
double r24011 = cos(r24004);
double r24012 = cos(r24006);
double r24013 = r24011 * r24012;
double r24014 = lambda1;
double r24015 = cos(r24014);
double r24016 = lambda2;
double r24017 = cos(r24016);
double r24018 = r24015 * r24017;
double r24019 = sin(r24014);
double r24020 = sin(r24016);
double r24021 = r24019 * r24020;
double r24022 = r24018 + r24021;
double r24023 = r24013 * r24022;
double r24024 = r24010 + r24023;
double r24025 = acos(r24024);
double r24026 = R;
double r24027 = r24025 * r24026;
return r24027;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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