\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 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sqrt[3]{\sin \lambda_1 \cdot \sin \left(-1 \cdot \lambda_2\right)} \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \left(-1 \cdot \lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-1 \cdot \lambda_2\right)\right)}\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r29038 = phi1;
double r29039 = sin(r29038);
double r29040 = phi2;
double r29041 = sin(r29040);
double r29042 = r29039 * r29041;
double r29043 = cos(r29038);
double r29044 = cos(r29040);
double r29045 = r29043 * r29044;
double r29046 = lambda1;
double r29047 = lambda2;
double r29048 = r29046 - r29047;
double r29049 = cos(r29048);
double r29050 = r29045 * r29049;
double r29051 = r29042 + r29050;
double r29052 = acos(r29051);
double r29053 = R;
double r29054 = r29052 * r29053;
return r29054;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r29055 = phi1;
double r29056 = sin(r29055);
double r29057 = phi2;
double r29058 = sin(r29057);
double r29059 = r29056 * r29058;
double r29060 = cos(r29055);
double r29061 = cos(r29057);
double r29062 = r29060 * r29061;
double r29063 = lambda1;
double r29064 = cos(r29063);
double r29065 = lambda2;
double r29066 = cos(r29065);
double r29067 = r29064 * r29066;
double r29068 = sin(r29063);
double r29069 = -1.0;
double r29070 = r29069 * r29065;
double r29071 = sin(r29070);
double r29072 = r29068 * r29071;
double r29073 = cbrt(r29072);
double r29074 = r29072 * r29072;
double r29075 = cbrt(r29074);
double r29076 = r29073 * r29075;
double r29077 = r29067 - r29076;
double r29078 = r29062 * r29077;
double r29079 = r29059 + r29078;
double r29080 = acos(r29079);
double r29081 = R;
double r29082 = r29080 * r29081;
return r29082;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.7
rmApplied sub-neg16.7
Applied cos-sum3.6
Simplified3.6
rmApplied add-cbrt-cube3.6
Applied add-cbrt-cube3.6
Applied cbrt-unprod3.6
Simplified3.6
rmApplied cube-mult3.6
Applied cbrt-prod3.6
Final simplification3.6
herbie shell --seed 2020018 +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))