\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(\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \log \left(e^{\mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}\right)\right)\right)\right)} \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23280 = phi1;
double r23281 = sin(r23280);
double r23282 = phi2;
double r23283 = sin(r23282);
double r23284 = r23281 * r23283;
double r23285 = cos(r23280);
double r23286 = cos(r23282);
double r23287 = r23285 * r23286;
double r23288 = lambda1;
double r23289 = lambda2;
double r23290 = r23288 - r23289;
double r23291 = cos(r23290);
double r23292 = r23287 * r23291;
double r23293 = r23284 + r23292;
double r23294 = acos(r23293);
double r23295 = R;
double r23296 = r23294 * r23295;
return r23296;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23297 = phi1;
double r23298 = sin(r23297);
double r23299 = phi2;
double r23300 = sin(r23299);
double r23301 = lambda1;
double r23302 = sin(r23301);
double r23303 = lambda2;
double r23304 = sin(r23303);
double r23305 = cos(r23301);
double r23306 = cos(r23303);
double r23307 = r23305 * r23306;
double r23308 = fma(r23302, r23304, r23307);
double r23309 = cos(r23297);
double r23310 = cos(r23299);
double r23311 = r23309 * r23310;
double r23312 = r23308 * r23311;
double r23313 = exp(r23312);
double r23314 = log(r23313);
double r23315 = fma(r23298, r23300, r23314);
double r23316 = acos(r23315);
double r23317 = log(r23316);
double r23318 = exp(r23317);
double r23319 = R;
double r23320 = r23318 * r23319;
return r23320;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 16.8
rmApplied cos-diff3.8
rmApplied add-exp-log3.8
Simplified3.8
rmApplied add-log-exp3.9
Final simplification3.9
herbie shell --seed 2019304 +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))