\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\left(\frac{\pi}{2} - \left(\frac{\pi}{2} - \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \mathsf{expm1}\left(\mathsf{log1p}\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)\right)\right)\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r29290 = phi1;
double r29291 = sin(r29290);
double r29292 = phi2;
double r29293 = sin(r29292);
double r29294 = r29291 * r29293;
double r29295 = cos(r29290);
double r29296 = cos(r29292);
double r29297 = r29295 * r29296;
double r29298 = lambda1;
double r29299 = lambda2;
double r29300 = r29298 - r29299;
double r29301 = cos(r29300);
double r29302 = r29297 * r29301;
double r29303 = r29294 + r29302;
double r29304 = acos(r29303);
double r29305 = R;
double r29306 = r29304 * r29305;
return r29306;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r29307 = atan2(1.0, 0.0);
double r29308 = 2.0;
double r29309 = r29307 / r29308;
double r29310 = phi1;
double r29311 = sin(r29310);
double r29312 = phi2;
double r29313 = sin(r29312);
double r29314 = r29311 * r29313;
double r29315 = cos(r29310);
double r29316 = cos(r29312);
double r29317 = r29315 * r29316;
double r29318 = lambda1;
double r29319 = cos(r29318);
double r29320 = lambda2;
double r29321 = cos(r29320);
double r29322 = r29319 * r29321;
double r29323 = r29317 * r29322;
double r29324 = sin(r29318);
double r29325 = sin(r29320);
double r29326 = r29324 * r29325;
double r29327 = r29317 * r29326;
double r29328 = log1p(r29327);
double r29329 = expm1(r29328);
double r29330 = r29323 + r29329;
double r29331 = r29314 + r29330;
double r29332 = acos(r29331);
double r29333 = r29309 - r29332;
double r29334 = r29309 - r29333;
double r29335 = R;
double r29336 = r29334 * r29335;
return r29336;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.8
rmApplied cos-diff3.6
Applied distribute-lft-in3.6
rmApplied expm1-log1p-u3.6
rmApplied acos-asin3.7
rmApplied asin-acos3.6
Final simplification3.6
herbie shell --seed 2020056 +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))