\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 r23977 = phi1;
double r23978 = sin(r23977);
double r23979 = phi2;
double r23980 = sin(r23979);
double r23981 = r23978 * r23980;
double r23982 = cos(r23977);
double r23983 = cos(r23979);
double r23984 = r23982 * r23983;
double r23985 = lambda1;
double r23986 = lambda2;
double r23987 = r23985 - r23986;
double r23988 = cos(r23987);
double r23989 = r23984 * r23988;
double r23990 = r23981 + r23989;
double r23991 = acos(r23990);
double r23992 = R;
double r23993 = r23991 * r23992;
return r23993;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23994 = phi1;
double r23995 = sin(r23994);
double r23996 = phi2;
double r23997 = sin(r23996);
double r23998 = r23995 * r23997;
double r23999 = exp(r23998);
double r24000 = log(r23999);
double r24001 = cos(r23994);
double r24002 = cos(r23996);
double r24003 = r24001 * r24002;
double r24004 = lambda1;
double r24005 = cos(r24004);
double r24006 = lambda2;
double r24007 = cos(r24006);
double r24008 = r24005 * r24007;
double r24009 = sin(r24004);
double r24010 = sin(r24006);
double r24011 = r24009 * r24010;
double r24012 = r24008 + r24011;
double r24013 = r24003 * r24012;
double r24014 = r24000 + r24013;
double r24015 = acos(r24014);
double r24016 = R;
double r24017 = r24015 * r24016;
return r24017;
}



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))