\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^{\log \left(\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)\right)} \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1263216 = phi1;
double r1263217 = sin(r1263216);
double r1263218 = phi2;
double r1263219 = sin(r1263218);
double r1263220 = r1263217 * r1263219;
double r1263221 = cos(r1263216);
double r1263222 = cos(r1263218);
double r1263223 = r1263221 * r1263222;
double r1263224 = lambda1;
double r1263225 = lambda2;
double r1263226 = r1263224 - r1263225;
double r1263227 = cos(r1263226);
double r1263228 = r1263223 * r1263227;
double r1263229 = r1263220 + r1263228;
double r1263230 = acos(r1263229);
double r1263231 = R;
double r1263232 = r1263230 * r1263231;
return r1263232;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1263233 = lambda2;
double r1263234 = sin(r1263233);
double r1263235 = lambda1;
double r1263236 = sin(r1263235);
double r1263237 = cos(r1263233);
double r1263238 = cos(r1263235);
double r1263239 = r1263237 * r1263238;
double r1263240 = fma(r1263234, r1263236, r1263239);
double r1263241 = phi2;
double r1263242 = cos(r1263241);
double r1263243 = r1263240 * r1263242;
double r1263244 = phi1;
double r1263245 = cos(r1263244);
double r1263246 = sin(r1263244);
double r1263247 = sin(r1263241);
double r1263248 = r1263246 * r1263247;
double r1263249 = fma(r1263243, r1263245, r1263248);
double r1263250 = acos(r1263249);
double r1263251 = log(r1263250);
double r1263252 = exp(r1263251);
double r1263253 = R;
double r1263254 = r1263252 * r1263253;
return r1263254;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 16.9
Simplified16.9
rmApplied cos-diff4.0
rmApplied add-log-exp4.0
Simplified4.0
rmApplied add-exp-log4.0
Simplified4.0
Final simplification4.0
herbie shell --seed 2019200 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Spherical law of cosines"
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))