\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(\log \left(e^{\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)\right)\right)}\right)\right)} \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r27323 = phi1;
double r27324 = sin(r27323);
double r27325 = phi2;
double r27326 = sin(r27325);
double r27327 = r27324 * r27326;
double r27328 = cos(r27323);
double r27329 = cos(r27325);
double r27330 = r27328 * r27329;
double r27331 = lambda1;
double r27332 = lambda2;
double r27333 = r27331 - r27332;
double r27334 = cos(r27333);
double r27335 = r27330 * r27334;
double r27336 = r27327 + r27335;
double r27337 = acos(r27336);
double r27338 = R;
double r27339 = r27337 * r27338;
return r27339;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r27340 = phi1;
double r27341 = sin(r27340);
double r27342 = phi2;
double r27343 = sin(r27342);
double r27344 = r27341 * r27343;
double r27345 = cos(r27340);
double r27346 = cos(r27342);
double r27347 = r27345 * r27346;
double r27348 = lambda1;
double r27349 = cos(r27348);
double r27350 = lambda2;
double r27351 = cos(r27350);
double r27352 = r27349 * r27351;
double r27353 = r27347 * r27352;
double r27354 = sin(r27348);
double r27355 = sin(r27350);
double r27356 = r27354 * r27355;
double r27357 = r27347 * r27356;
double r27358 = exp(r27357);
double r27359 = log(r27358);
double r27360 = r27353 + r27359;
double r27361 = r27344 + r27360;
double r27362 = acos(r27361);
double r27363 = exp(r27362);
double r27364 = log(r27363);
double r27365 = log(r27364);
double r27366 = exp(r27365);
double r27367 = R;
double r27368 = r27366 * r27367;
return r27368;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.0
rmApplied cos-diff3.8
Applied distribute-lft-in3.8
rmApplied add-log-exp3.8
rmApplied add-exp-log3.8
rmApplied add-log-exp3.9
Final simplification3.9
herbie shell --seed 2020035
(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))