\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(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \mathsf{log1p}\left(\mathsf{expm1}\left(\left(\sin \lambda_1 \cdot \sin \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 r24403 = phi1;
double r24404 = sin(r24403);
double r24405 = phi2;
double r24406 = sin(r24405);
double r24407 = r24404 * r24406;
double r24408 = cos(r24403);
double r24409 = cos(r24405);
double r24410 = r24408 * r24409;
double r24411 = lambda1;
double r24412 = lambda2;
double r24413 = r24411 - r24412;
double r24414 = cos(r24413);
double r24415 = r24410 * r24414;
double r24416 = r24407 + r24415;
double r24417 = acos(r24416);
double r24418 = R;
double r24419 = r24417 * r24418;
return r24419;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r24420 = phi1;
double r24421 = sin(r24420);
double r24422 = phi2;
double r24423 = sin(r24422);
double r24424 = lambda1;
double r24425 = cos(r24424);
double r24426 = lambda2;
double r24427 = cos(r24426);
double r24428 = r24425 * r24427;
double r24429 = cos(r24420);
double r24430 = cos(r24422);
double r24431 = r24429 * r24430;
double r24432 = r24428 * r24431;
double r24433 = sin(r24424);
double r24434 = sin(r24426);
double r24435 = r24433 * r24434;
double r24436 = r24435 * r24431;
double r24437 = expm1(r24436);
double r24438 = log1p(r24437);
double r24439 = r24432 + r24438;
double r24440 = fma(r24421, r24423, r24439);
double r24441 = acos(r24440);
double r24442 = R;
double r24443 = r24441 * r24442;
return r24443;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 17.0
Simplified17.0
rmApplied cos-diff3.9
Applied distribute-lft-in3.9
Simplified3.9
Simplified3.9
rmApplied log1p-expm1-u3.9
Final simplification3.9
herbie shell --seed 2020043 +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))