\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(\log \left(e^{\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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) - 1}\right)\right)} \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23958 = phi1;
double r23959 = sin(r23958);
double r23960 = phi2;
double r23961 = sin(r23960);
double r23962 = r23959 * r23961;
double r23963 = cos(r23958);
double r23964 = cos(r23960);
double r23965 = r23963 * r23964;
double r23966 = lambda1;
double r23967 = lambda2;
double r23968 = r23966 - r23967;
double r23969 = cos(r23968);
double r23970 = r23965 * r23969;
double r23971 = r23962 + r23970;
double r23972 = acos(r23971);
double r23973 = R;
double r23974 = r23972 * r23973;
return r23974;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r23975 = phi1;
double r23976 = sin(r23975);
double r23977 = phi2;
double r23978 = sin(r23977);
double r23979 = r23976 * r23978;
double r23980 = cos(r23975);
double r23981 = cos(r23977);
double r23982 = r23980 * r23981;
double r23983 = lambda1;
double r23984 = cos(r23983);
double r23985 = lambda2;
double r23986 = cos(r23985);
double r23987 = r23984 * r23986;
double r23988 = sin(r23983);
double r23989 = -r23985;
double r23990 = sin(r23989);
double r23991 = r23988 * r23990;
double r23992 = r23987 - r23991;
double r23993 = r23982 * r23992;
double r23994 = r23979 + r23993;
double r23995 = acos(r23994);
double r23996 = 1.0;
double r23997 = r23995 - r23996;
double r23998 = exp(r23997);
double r23999 = log(r23998);
double r24000 = log1p(r23999);
double r24001 = exp(r24000);
double r24002 = R;
double r24003 = r24001 * r24002;
return r24003;
}



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 sub-neg17.2
Applied cos-sum3.9
Simplified3.9
rmApplied add-exp-log3.9
rmApplied log1p-expm1-u3.9
rmApplied add-log-exp3.9
Simplified3.9
Final simplification3.9
herbie shell --seed 2020060 +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))