\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\left(\frac{\pi}{2} - \left(\frac{\pi}{2} - \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) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r25424 = phi1;
double r25425 = sin(r25424);
double r25426 = phi2;
double r25427 = sin(r25426);
double r25428 = r25425 * r25427;
double r25429 = cos(r25424);
double r25430 = cos(r25426);
double r25431 = r25429 * r25430;
double r25432 = lambda1;
double r25433 = lambda2;
double r25434 = r25432 - r25433;
double r25435 = cos(r25434);
double r25436 = r25431 * r25435;
double r25437 = r25428 + r25436;
double r25438 = acos(r25437);
double r25439 = R;
double r25440 = r25438 * r25439;
return r25440;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r25441 = atan2(1.0, 0.0);
double r25442 = 2.0;
double r25443 = r25441 / r25442;
double r25444 = phi1;
double r25445 = sin(r25444);
double r25446 = phi2;
double r25447 = sin(r25446);
double r25448 = r25445 * r25447;
double r25449 = cos(r25444);
double r25450 = cos(r25446);
double r25451 = r25449 * r25450;
double r25452 = lambda1;
double r25453 = cos(r25452);
double r25454 = lambda2;
double r25455 = cos(r25454);
double r25456 = r25453 * r25455;
double r25457 = r25451 * r25456;
double r25458 = sin(r25452);
double r25459 = sin(r25454);
double r25460 = r25458 * r25459;
double r25461 = r25451 * r25460;
double r25462 = r25457 + r25461;
double r25463 = r25448 + r25462;
double r25464 = acos(r25463);
double r25465 = r25443 - r25464;
double r25466 = r25443 - r25465;
double r25467 = R;
double r25468 = r25466 * r25467;
return r25468;
}



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.6
Applied distribute-lft-in3.6
rmApplied acos-asin3.7
rmApplied asin-acos3.6
Final simplification3.6
herbie shell --seed 2020056
(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))