R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}}}{\sqrt{1 - \left(\left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\left(\log \left(\sqrt{\sqrt{e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}}\right) + \log \left(\sqrt{\sqrt{e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}}\right)\right) + \log \left(\sqrt{e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right)\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4077297 = R;
double r4077298 = 2.0;
double r4077299 = phi1;
double r4077300 = phi2;
double r4077301 = r4077299 - r4077300;
double r4077302 = r4077301 / r4077298;
double r4077303 = sin(r4077302);
double r4077304 = pow(r4077303, r4077298);
double r4077305 = cos(r4077299);
double r4077306 = cos(r4077300);
double r4077307 = r4077305 * r4077306;
double r4077308 = lambda1;
double r4077309 = lambda2;
double r4077310 = r4077308 - r4077309;
double r4077311 = r4077310 / r4077298;
double r4077312 = sin(r4077311);
double r4077313 = r4077307 * r4077312;
double r4077314 = r4077313 * r4077312;
double r4077315 = r4077304 + r4077314;
double r4077316 = sqrt(r4077315);
double r4077317 = 1.0;
double r4077318 = r4077317 - r4077315;
double r4077319 = sqrt(r4077318);
double r4077320 = atan2(r4077316, r4077319);
double r4077321 = r4077298 * r4077320;
double r4077322 = r4077297 * r4077321;
return r4077322;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4077323 = R;
double r4077324 = 2.0;
double r4077325 = lambda1;
double r4077326 = lambda2;
double r4077327 = r4077325 - r4077326;
double r4077328 = r4077327 / r4077324;
double r4077329 = sin(r4077328);
double r4077330 = phi2;
double r4077331 = cos(r4077330);
double r4077332 = phi1;
double r4077333 = cos(r4077332);
double r4077334 = r4077331 * r4077333;
double r4077335 = r4077334 * r4077329;
double r4077336 = r4077329 * r4077335;
double r4077337 = r4077332 - r4077330;
double r4077338 = r4077337 / r4077324;
double r4077339 = sin(r4077338);
double r4077340 = pow(r4077339, r4077324);
double r4077341 = r4077336 + r4077340;
double r4077342 = sqrt(r4077341);
double r4077343 = 1.0;
double r4077344 = exp(r4077329);
double r4077345 = sqrt(r4077344);
double r4077346 = sqrt(r4077345);
double r4077347 = log(r4077346);
double r4077348 = r4077347 + r4077347;
double r4077349 = log(r4077345);
double r4077350 = r4077348 + r4077349;
double r4077351 = r4077334 * r4077350;
double r4077352 = r4077351 * r4077329;
double r4077353 = r4077352 + r4077340;
double r4077354 = r4077343 - r4077353;
double r4077355 = sqrt(r4077354);
double r4077356 = atan2(r4077342, r4077355);
double r4077357 = r4077324 * r4077356;
double r4077358 = r4077323 * r4077357;
return r4077358;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 25.0
rmApplied add-log-exp25.0
rmApplied add-sqr-sqrt25.1
Applied log-prod25.1
rmApplied add-sqr-sqrt25.1
Applied sqrt-prod25.1
Applied log-prod25.1
Final simplification25.1
herbie shell --seed 2019170
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* R (* 2.0 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))) (sqrt (- 1.0 (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))))))))