\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(\sin \phi_1 \cdot \sin \phi_2 + \frac{\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right)}{\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)}\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r28330 = phi1;
double r28331 = sin(r28330);
double r28332 = phi2;
double r28333 = sin(r28332);
double r28334 = r28331 * r28333;
double r28335 = cos(r28330);
double r28336 = cos(r28332);
double r28337 = r28335 * r28336;
double r28338 = lambda1;
double r28339 = lambda2;
double r28340 = r28338 - r28339;
double r28341 = cos(r28340);
double r28342 = r28337 * r28341;
double r28343 = r28334 + r28342;
double r28344 = acos(r28343);
double r28345 = R;
double r28346 = r28344 * r28345;
return r28346;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r28347 = phi1;
double r28348 = sin(r28347);
double r28349 = phi2;
double r28350 = sin(r28349);
double r28351 = r28348 * r28350;
double r28352 = cos(r28347);
double r28353 = cos(r28349);
double r28354 = lambda1;
double r28355 = cos(r28354);
double r28356 = lambda2;
double r28357 = cos(r28356);
double r28358 = sin(r28354);
double r28359 = -r28356;
double r28360 = sin(r28359);
double r28361 = r28358 * r28360;
double r28362 = fma(r28355, r28357, r28361);
double r28363 = r28355 * r28357;
double r28364 = r28363 - r28361;
double r28365 = r28362 * r28364;
double r28366 = expm1(r28365);
double r28367 = log1p(r28366);
double r28368 = r28353 * r28367;
double r28369 = r28352 * r28368;
double r28370 = r28363 + r28361;
double r28371 = r28369 / r28370;
double r28372 = r28351 + r28371;
double r28373 = acos(r28372);
double r28374 = R;
double r28375 = r28373 * r28374;
return r28375;
}



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 sub-neg16.8
Applied cos-sum3.6
Simplified3.6
rmApplied flip--3.6
Applied associate-*r/3.7
Simplified3.7
rmApplied log1p-expm1-u3.7
Final simplification3.7
herbie shell --seed 2020056 +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))