\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(\sqrt[3]{{\left(\sin \phi_1 \cdot \sin \phi_2\right)}^{3}} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r22319 = phi1;
double r22320 = sin(r22319);
double r22321 = phi2;
double r22322 = sin(r22321);
double r22323 = r22320 * r22322;
double r22324 = cos(r22319);
double r22325 = cos(r22321);
double r22326 = r22324 * r22325;
double r22327 = lambda1;
double r22328 = lambda2;
double r22329 = r22327 - r22328;
double r22330 = cos(r22329);
double r22331 = r22326 * r22330;
double r22332 = r22323 + r22331;
double r22333 = acos(r22332);
double r22334 = R;
double r22335 = r22333 * r22334;
return r22335;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r22336 = phi1;
double r22337 = sin(r22336);
double r22338 = phi2;
double r22339 = sin(r22338);
double r22340 = r22337 * r22339;
double r22341 = 3.0;
double r22342 = pow(r22340, r22341);
double r22343 = cbrt(r22342);
double r22344 = cos(r22336);
double r22345 = cos(r22338);
double r22346 = r22344 * r22345;
double r22347 = lambda1;
double r22348 = cos(r22347);
double r22349 = lambda2;
double r22350 = cos(r22349);
double r22351 = r22348 * r22350;
double r22352 = sin(r22347);
double r22353 = -r22349;
double r22354 = sin(r22353);
double r22355 = r22352 * r22354;
double r22356 = expm1(r22355);
double r22357 = log1p(r22356);
double r22358 = r22351 - r22357;
double r22359 = r22346 * r22358;
double r22360 = r22343 + r22359;
double r22361 = acos(r22360);
double r22362 = R;
double r22363 = r22361 * r22362;
return r22363;
}



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 sub-neg16.9
Applied cos-sum3.9
Simplified3.9
rmApplied log1p-expm1-u4.0
rmApplied add-cbrt-cube4.0
Applied add-cbrt-cube4.0
Applied cbrt-unprod4.0
Simplified4.0
Final simplification4.0
herbie shell --seed 2020033 +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))