\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 r23362 = phi1;
double r23363 = sin(r23362);
double r23364 = phi2;
double r23365 = sin(r23364);
double r23366 = r23363 * r23365;
double r23367 = cos(r23362);
double r23368 = cos(r23364);
double r23369 = r23367 * r23368;
double r23370 = lambda1;
double r23371 = lambda2;
double r23372 = r23370 - r23371;
double r23373 = cos(r23372);
double r23374 = r23369 * r23373;
double r23375 = r23366 + r23374;
double r23376 = acos(r23375);
double r23377 = R;
double r23378 = r23376 * r23377;
return r23378;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23379 = phi1;
double r23380 = sin(r23379);
double r23381 = phi2;
double r23382 = sin(r23381);
double r23383 = r23380 * r23382;
double r23384 = exp(r23383);
double r23385 = log(r23384);
double r23386 = cos(r23379);
double r23387 = cos(r23381);
double r23388 = r23386 * r23387;
double r23389 = lambda1;
double r23390 = cos(r23389);
double r23391 = lambda2;
double r23392 = cos(r23391);
double r23393 = r23390 * r23392;
double r23394 = sin(r23389);
double r23395 = sin(r23391);
double r23396 = r23394 * r23395;
double r23397 = r23393 + r23396;
double r23398 = r23388 * r23397;
double r23399 = r23385 + r23398;
double r23400 = acos(r23399);
double r23401 = R;
double r23402 = r23400 * r23401;
return r23402;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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