\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(\mathsf{expm1}\left(\log \left(\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 + \sqrt[3]{{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}\right)\right)\right)\right)\right)} \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r24344 = phi1;
double r24345 = sin(r24344);
double r24346 = phi2;
double r24347 = sin(r24346);
double r24348 = r24345 * r24347;
double r24349 = cos(r24344);
double r24350 = cos(r24346);
double r24351 = r24349 * r24350;
double r24352 = lambda1;
double r24353 = lambda2;
double r24354 = r24352 - r24353;
double r24355 = cos(r24354);
double r24356 = r24351 * r24355;
double r24357 = r24348 + r24356;
double r24358 = acos(r24357);
double r24359 = R;
double r24360 = r24358 * r24359;
return r24360;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r24361 = phi1;
double r24362 = sin(r24361);
double r24363 = phi2;
double r24364 = sin(r24363);
double r24365 = r24362 * r24364;
double r24366 = cos(r24361);
double r24367 = cos(r24363);
double r24368 = r24366 * r24367;
double r24369 = lambda1;
double r24370 = cos(r24369);
double r24371 = lambda2;
double r24372 = cos(r24371);
double r24373 = r24370 * r24372;
double r24374 = sin(r24369);
double r24375 = sin(r24371);
double r24376 = r24374 * r24375;
double r24377 = 3.0;
double r24378 = pow(r24376, r24377);
double r24379 = cbrt(r24378);
double r24380 = r24373 + r24379;
double r24381 = r24368 * r24380;
double r24382 = r24365 + r24381;
double r24383 = acos(r24382);
double r24384 = log(r24383);
double r24385 = expm1(r24384);
double r24386 = log1p(r24385);
double r24387 = exp(r24386);
double r24388 = R;
double r24389 = r24387 * r24388;
return r24389;
}



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.7
rmApplied add-cbrt-cube3.7
Applied add-cbrt-cube3.7
Applied cbrt-unprod3.7
Simplified3.7
rmApplied add-exp-log3.7
rmApplied log1p-expm1-u3.7
Final simplification3.7
herbie shell --seed 2019354 +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))