\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(\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) + \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \phi_2 \cdot \sin \phi_1\right)\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r359181 = phi1;
double r359182 = sin(r359181);
double r359183 = phi2;
double r359184 = sin(r359183);
double r359185 = r359182 * r359184;
double r359186 = cos(r359181);
double r359187 = cos(r359183);
double r359188 = r359186 * r359187;
double r359189 = lambda1;
double r359190 = lambda2;
double r359191 = r359189 - r359190;
double r359192 = cos(r359191);
double r359193 = r359188 * r359192;
double r359194 = r359185 + r359193;
double r359195 = acos(r359194);
double r359196 = R;
double r359197 = r359195 * r359196;
return r359197;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r359198 = phi1;
double r359199 = cos(r359198);
double r359200 = phi2;
double r359201 = cos(r359200);
double r359202 = r359199 * r359201;
double r359203 = lambda1;
double r359204 = cos(r359203);
double r359205 = lambda2;
double r359206 = cos(r359205);
double r359207 = r359204 * r359206;
double r359208 = sin(r359203);
double r359209 = sin(r359205);
double r359210 = r359208 * r359209;
double r359211 = r359207 + r359210;
double r359212 = r359202 * r359211;
double r359213 = sin(r359200);
double r359214 = sin(r359198);
double r359215 = r359213 * r359214;
double r359216 = expm1(r359215);
double r359217 = log1p(r359216);
double r359218 = r359212 + r359217;
double r359219 = acos(r359218);
double r359220 = R;
double r359221 = r359219 * r359220;
return r359221;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.7
rmApplied cos-diff3.8
rmApplied add-log-exp3.8
rmApplied log1p-expm1-u3.8
Simplified3.8
Final simplification3.8
herbie shell --seed 2019156 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Spherical law of cosines"
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))