\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 \mathsf{log1p}\left(e^{\cos^{-1} \left(\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \cos \phi_2 \cdot \cos \phi_1, \sin \phi_1 \cdot \sin \phi_2\right)\right)} - 1\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1302284 = phi1;
double r1302285 = sin(r1302284);
double r1302286 = phi2;
double r1302287 = sin(r1302286);
double r1302288 = r1302285 * r1302287;
double r1302289 = cos(r1302284);
double r1302290 = cos(r1302286);
double r1302291 = r1302289 * r1302290;
double r1302292 = lambda1;
double r1302293 = lambda2;
double r1302294 = r1302292 - r1302293;
double r1302295 = cos(r1302294);
double r1302296 = r1302291 * r1302295;
double r1302297 = r1302288 + r1302296;
double r1302298 = acos(r1302297);
double r1302299 = R;
double r1302300 = r1302298 * r1302299;
return r1302300;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1302301 = R;
double r1302302 = lambda2;
double r1302303 = sin(r1302302);
double r1302304 = lambda1;
double r1302305 = sin(r1302304);
double r1302306 = cos(r1302304);
double r1302307 = cos(r1302302);
double r1302308 = r1302306 * r1302307;
double r1302309 = fma(r1302303, r1302305, r1302308);
double r1302310 = phi2;
double r1302311 = cos(r1302310);
double r1302312 = phi1;
double r1302313 = cos(r1302312);
double r1302314 = r1302311 * r1302313;
double r1302315 = sin(r1302312);
double r1302316 = sin(r1302310);
double r1302317 = r1302315 * r1302316;
double r1302318 = fma(r1302309, r1302314, r1302317);
double r1302319 = acos(r1302318);
double r1302320 = exp(r1302319);
double r1302321 = 1.0;
double r1302322 = r1302320 - r1302321;
double r1302323 = log1p(r1302322);
double r1302324 = r1302301 * r1302323;
return r1302324;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 16.7
Simplified16.7
rmApplied cos-diff3.8
rmApplied log1p-expm1-u3.8
Simplified3.8
rmApplied add-log-exp3.8
rmApplied expm1-udef3.8
Applied exp-diff3.8
Applied log-div3.8
Simplified3.8
Simplified3.8
Final simplification3.8
herbie shell --seed 2019172 +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))