\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^{\log \left(\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \frac{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}{\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 r30035 = phi1;
double r30036 = sin(r30035);
double r30037 = phi2;
double r30038 = sin(r30037);
double r30039 = r30036 * r30038;
double r30040 = cos(r30035);
double r30041 = cos(r30037);
double r30042 = r30040 * r30041;
double r30043 = lambda1;
double r30044 = lambda2;
double r30045 = r30043 - r30044;
double r30046 = cos(r30045);
double r30047 = r30042 * r30046;
double r30048 = r30039 + r30047;
double r30049 = acos(r30048);
double r30050 = R;
double r30051 = r30049 * r30050;
return r30051;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r30052 = phi1;
double r30053 = sin(r30052);
double r30054 = phi2;
double r30055 = sin(r30054);
double r30056 = r30053 * r30055;
double r30057 = cos(r30052);
double r30058 = cos(r30054);
double r30059 = r30057 * r30058;
double r30060 = lambda1;
double r30061 = cos(r30060);
double r30062 = lambda2;
double r30063 = cos(r30062);
double r30064 = r30061 * r30063;
double r30065 = r30064 * r30064;
double r30066 = sin(r30060);
double r30067 = sin(r30062);
double r30068 = r30066 * r30067;
double r30069 = r30068 * r30068;
double r30070 = r30065 - r30069;
double r30071 = r30059 * r30070;
double r30072 = r30064 - r30068;
double r30073 = r30071 / r30072;
double r30074 = r30056 + r30073;
double r30075 = acos(r30074);
double r30076 = log(r30075);
double r30077 = exp(r30076);
double r30078 = R;
double r30079 = r30077 * r30078;
return r30079;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.8
rmApplied cos-diff3.4
rmApplied flip-+3.4
Applied associate-*r/3.4
rmApplied add-exp-log3.4
Final simplification3.4
herbie shell --seed 2019346
(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))