\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^{\frac{\pi}{2} - \left(\frac{\pi}{2} - \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)}\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r29020 = phi1;
double r29021 = sin(r29020);
double r29022 = phi2;
double r29023 = sin(r29022);
double r29024 = r29021 * r29023;
double r29025 = cos(r29020);
double r29026 = cos(r29022);
double r29027 = r29025 * r29026;
double r29028 = lambda1;
double r29029 = lambda2;
double r29030 = r29028 - r29029;
double r29031 = cos(r29030);
double r29032 = r29027 * r29031;
double r29033 = r29024 + r29032;
double r29034 = acos(r29033);
double r29035 = R;
double r29036 = r29034 * r29035;
return r29036;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r29037 = atan2(1.0, 0.0);
double r29038 = 2.0;
double r29039 = r29037 / r29038;
double r29040 = phi1;
double r29041 = sin(r29040);
double r29042 = phi2;
double r29043 = sin(r29042);
double r29044 = r29041 * r29043;
double r29045 = cos(r29040);
double r29046 = cos(r29042);
double r29047 = r29045 * r29046;
double r29048 = lambda1;
double r29049 = cos(r29048);
double r29050 = lambda2;
double r29051 = cos(r29050);
double r29052 = r29049 * r29051;
double r29053 = sin(r29048);
double r29054 = -r29050;
double r29055 = sin(r29054);
double r29056 = r29053 * r29055;
double r29057 = r29052 - r29056;
double r29058 = r29047 * r29057;
double r29059 = r29044 + r29058;
double r29060 = acos(r29059);
double r29061 = r29039 - r29060;
double r29062 = r29039 - r29061;
double r29063 = exp(r29062);
double r29064 = log(r29063);
double r29065 = R;
double r29066 = r29064 * r29065;
return r29066;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.9
rmApplied sub-neg16.9
Applied cos-sum3.9
Simplified3.9
rmApplied add-log-exp3.9
rmApplied acos-asin3.9
rmApplied asin-acos3.9
Final simplification3.9
herbie shell --seed 2019344
(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))