\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(\log \left(e^{\sin \phi_1 \cdot \sin \phi_2}\right) + \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) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r24417 = phi1;
double r24418 = sin(r24417);
double r24419 = phi2;
double r24420 = sin(r24419);
double r24421 = r24418 * r24420;
double r24422 = cos(r24417);
double r24423 = cos(r24419);
double r24424 = r24422 * r24423;
double r24425 = lambda1;
double r24426 = lambda2;
double r24427 = r24425 - r24426;
double r24428 = cos(r24427);
double r24429 = r24424 * r24428;
double r24430 = r24421 + r24429;
double r24431 = acos(r24430);
double r24432 = R;
double r24433 = r24431 * r24432;
return r24433;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r24434 = phi1;
double r24435 = sin(r24434);
double r24436 = phi2;
double r24437 = sin(r24436);
double r24438 = r24435 * r24437;
double r24439 = exp(r24438);
double r24440 = log(r24439);
double r24441 = cos(r24434);
double r24442 = cos(r24436);
double r24443 = r24441 * r24442;
double r24444 = lambda1;
double r24445 = cos(r24444);
double r24446 = lambda2;
double r24447 = cos(r24446);
double r24448 = r24445 * r24447;
double r24449 = sin(r24444);
double r24450 = sin(r24446);
double r24451 = r24449 * r24450;
double r24452 = r24448 + r24451;
double r24453 = r24443 * r24452;
double r24454 = r24440 + r24453;
double r24455 = acos(r24454);
double r24456 = R;
double r24457 = r24455 * r24456;
return r24457;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.3
rmApplied cos-diff3.7
rmApplied add-log-exp3.7
Final simplification3.7
herbie shell --seed 2019325
(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))