\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^{\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) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r30021 = phi1;
double r30022 = sin(r30021);
double r30023 = phi2;
double r30024 = sin(r30023);
double r30025 = r30022 * r30024;
double r30026 = cos(r30021);
double r30027 = cos(r30023);
double r30028 = r30026 * r30027;
double r30029 = lambda1;
double r30030 = lambda2;
double r30031 = r30029 - r30030;
double r30032 = cos(r30031);
double r30033 = r30028 * r30032;
double r30034 = r30025 + r30033;
double r30035 = acos(r30034);
double r30036 = R;
double r30037 = r30035 * r30036;
return r30037;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r30038 = phi1;
double r30039 = sin(r30038);
double r30040 = phi2;
double r30041 = sin(r30040);
double r30042 = r30039 * r30041;
double r30043 = cos(r30038);
double r30044 = cos(r30040);
double r30045 = r30043 * r30044;
double r30046 = lambda1;
double r30047 = cos(r30046);
double r30048 = lambda2;
double r30049 = cos(r30048);
double r30050 = r30047 * r30049;
double r30051 = sin(r30046);
double r30052 = -r30048;
double r30053 = sin(r30052);
double r30054 = r30051 * r30053;
double r30055 = r30050 - r30054;
double r30056 = r30045 * r30055;
double r30057 = r30042 + r30056;
double r30058 = acos(r30057);
double r30059 = exp(r30058);
double r30060 = log(r30059);
double r30061 = R;
double r30062 = r30060 * r30061;
return r30062;
}



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 sub-neg16.8
Applied cos-sum3.4
Simplified3.4
rmApplied add-log-exp3.4
Final simplification3.4
herbie shell --seed 2019346 +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))