\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^{\mathsf{log1p}\left(\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 \lambda_2\right)\right) - 1}\right)\right)} \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23517 = phi1;
double r23518 = sin(r23517);
double r23519 = phi2;
double r23520 = sin(r23519);
double r23521 = r23518 * r23520;
double r23522 = cos(r23517);
double r23523 = cos(r23519);
double r23524 = r23522 * r23523;
double r23525 = lambda1;
double r23526 = lambda2;
double r23527 = r23525 - r23526;
double r23528 = cos(r23527);
double r23529 = r23524 * r23528;
double r23530 = r23521 + r23529;
double r23531 = acos(r23530);
double r23532 = R;
double r23533 = r23531 * r23532;
return r23533;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23534 = phi1;
double r23535 = sin(r23534);
double r23536 = phi2;
double r23537 = sin(r23536);
double r23538 = r23535 * r23537;
double r23539 = cos(r23534);
double r23540 = cos(r23536);
double r23541 = r23539 * r23540;
double r23542 = lambda1;
double r23543 = cos(r23542);
double r23544 = lambda2;
double r23545 = cos(r23544);
double r23546 = r23543 * r23545;
double r23547 = sin(r23542);
double r23548 = sin(r23544);
double r23549 = r23547 * r23548;
double r23550 = r23546 + r23549;
double r23551 = r23541 * r23550;
double r23552 = r23538 + r23551;
double r23553 = acos(r23552);
double r23554 = 1.0;
double r23555 = r23553 - r23554;
double r23556 = exp(r23555);
double r23557 = log(r23556);
double r23558 = log1p(r23557);
double r23559 = exp(r23558);
double r23560 = R;
double r23561 = r23559 * r23560;
return r23561;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.2
rmApplied cos-diff3.9
rmApplied add-exp-log3.9
rmApplied log1p-expm1-u3.9
rmApplied add-log-exp3.9
Simplified3.9
Final simplification3.9
herbie shell --seed 2020060 +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))