\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 RR \cdot e^{\log \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right), \sin \phi_2 \cdot \sin \phi_1\right)\right)\right)}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1362228 = phi1;
double r1362229 = sin(r1362228);
double r1362230 = phi2;
double r1362231 = sin(r1362230);
double r1362232 = r1362229 * r1362231;
double r1362233 = cos(r1362228);
double r1362234 = cos(r1362230);
double r1362235 = r1362233 * r1362234;
double r1362236 = lambda1;
double r1362237 = lambda2;
double r1362238 = r1362236 - r1362237;
double r1362239 = cos(r1362238);
double r1362240 = r1362235 * r1362239;
double r1362241 = r1362232 + r1362240;
double r1362242 = acos(r1362241);
double r1362243 = R;
double r1362244 = r1362242 * r1362243;
return r1362244;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1362245 = R;
double r1362246 = atan2(1.0, 0.0);
double r1362247 = 2.0;
double r1362248 = r1362246 / r1362247;
double r1362249 = phi2;
double r1362250 = cos(r1362249);
double r1362251 = phi1;
double r1362252 = cos(r1362251);
double r1362253 = r1362250 * r1362252;
double r1362254 = lambda1;
double r1362255 = cos(r1362254);
double r1362256 = lambda2;
double r1362257 = cos(r1362256);
double r1362258 = sin(r1362254);
double r1362259 = sin(r1362256);
double r1362260 = r1362258 * r1362259;
double r1362261 = fma(r1362255, r1362257, r1362260);
double r1362262 = sin(r1362249);
double r1362263 = sin(r1362251);
double r1362264 = r1362262 * r1362263;
double r1362265 = fma(r1362253, r1362261, r1362264);
double r1362266 = asin(r1362265);
double r1362267 = r1362248 - r1362266;
double r1362268 = log(r1362267);
double r1362269 = exp(r1362268);
double r1362270 = r1362245 * r1362269;
return r1362270;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 17.0
rmApplied cos-diff3.7
Applied distribute-lft-in3.7
rmApplied add-exp-log3.7
Simplified3.7
rmApplied acos-asin3.7
Final simplification3.7
herbie shell --seed 2019168 +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))